예제 #1
0
 public UnloadSceneInfo(AsyncOperation asyncOperation, string sceneAssetName, UnloadSceneCallbacks unloadSceneCallbacks, object userData)
 {
     m_AsyncOperation       = asyncOperation;
     m_SceneAssetName       = sceneAssetName;
     m_UnloadSceneCallbacks = unloadSceneCallbacks;
     m_UserData             = userData;
 }
        /// <summary>
        /// 异步卸载场景。
        /// </summary>
        /// <param name="sceneAssetName">要卸载场景资源的名称。</param>
        /// <param name="unloadSceneCallbacks">卸载场景回调函数集。</param>
        /// <param name="userData">用户自定义数据。</param>
        public void UnloadScene(string sceneAssetName, UnloadSceneCallbacks unloadSceneCallbacks, object userData)
        {
            if (m_ResourceComponent.ResourceHelper == null)
            {
                throw new Exception("You must set resource helper first.");
            }

            object asset = null;

            if (m_SceneToAssetMap.TryGetValue(sceneAssetName, out asset))
            {
                m_SceneToAssetMap.Remove(sceneAssetName);

                IObjectPool <AssetObject> assetObjectPools = null;
                if (m_AssetPools.TryGetValue(AssetCategory.Scene, out assetObjectPools))
                {
                    assetObjectPools.Unspawn(asset);
                }
            }
            else
            {
                throw new Exception(Utility.Text.Format("Can not find asset of scene '{0}'.", sceneAssetName));
            }

            m_ResourceComponent.ResourceHelper.UnloadScene(sceneAssetName, unloadSceneCallbacks, userData);
        }
예제 #3
0
        public void AddUnloadSceneInfo(string sceneAssetName, UnloadSceneCallbacks unloadSceneCallbacks, object userData)
        {
            if (string.IsNullOrEmpty(sceneAssetName))
            {
                Log.Error("Scene asset name is invalid.");
                return;
            }

            if (unloadSceneCallbacks == null)
            {
                Log.Error("Unload scene callbacks is invalid.");
                return;
            }

            AsyncOperation asyncOperation = SceneManager.UnloadSceneAsync(sceneAssetName);

            if (asyncOperation == null)
            {
                return;
            }

            m_UnloadSceneInfos.AddLast(new UnloadSceneInfo(asyncOperation, sceneAssetName, unloadSceneCallbacks, userData));
        }