//更新卸载场景 private void UpdateUnloadSceneInfos() { if (m_UnloadSceneInfos.Count > 0) { for (index = 0; index < m_UnloadSceneInfos.Count;) { UnloadSceneInfo unloadSceneInfo = m_UnloadSceneInfos[index]; if (unloadSceneInfo.AsyncOperation.isDone) //判断是否异步完成 { if (unloadSceneInfo.AsyncOperation.allowSceneActivation) { if (unloadSceneInfo.UnloadSceneCallbacks.UnloadSceneSuccessCallback != null) { unloadSceneInfo.UnloadSceneCallbacks.UnloadSceneSuccessCallback.Invoke(unloadSceneInfo.SceneAssetName, unloadSceneInfo.UserData); } } else { if (unloadSceneInfo.UnloadSceneCallbacks.UnloadSceneFailureCallback != null) { unloadSceneInfo.UnloadSceneCallbacks.UnloadSceneFailureCallback.Invoke(unloadSceneInfo.SceneAssetName, unloadSceneInfo.UserData); } } m_UnloadSceneInfos.RemoveAt(index); //移除 } else { index++; } } } }
private void Update() { if (m_LoadAssetInfos.Count > 0) { int count = 0; LinkedListNode <LoadAssetInfo> current = m_LoadAssetInfos.First; while (current != null && count < m_LoadAssetCountPerFrame) { LoadAssetInfo loadAssetInfo = current.Value; float elapseSeconds = (float)(DateTime.Now - loadAssetInfo.StartTime).TotalSeconds; if (elapseSeconds >= loadAssetInfo.DelaySeconds) { UnityEngine.Object asset = null; #if UNITY_EDITOR if (loadAssetInfo.AssetType != null) { asset = UnityEditor.AssetDatabase.LoadAssetAtPath(loadAssetInfo.AssetName, loadAssetInfo.AssetType); } else { asset = UnityEditor.AssetDatabase.LoadMainAssetAtPath(loadAssetInfo.AssetName); } #endif if (asset != null) { if (loadAssetInfo.LoadAssetCallbacks.LoadAssetSuccessCallback != null) { loadAssetInfo.LoadAssetCallbacks.LoadAssetSuccessCallback(loadAssetInfo.AssetName, asset, elapseSeconds, loadAssetInfo.UserData); } } else { if (loadAssetInfo.LoadAssetCallbacks.LoadAssetFailureCallback != null) { loadAssetInfo.LoadAssetCallbacks.LoadAssetFailureCallback(loadAssetInfo.AssetName, LoadResourceStatus.NotExist, "Can not load this asset from asset database.", loadAssetInfo.UserData); } } LinkedListNode <LoadAssetInfo> next = current.Next; m_LoadAssetInfos.Remove(loadAssetInfo); current = next; count++; } else { if (loadAssetInfo.LoadAssetCallbacks.LoadAssetUpdateCallback != null) { loadAssetInfo.LoadAssetCallbacks.LoadAssetUpdateCallback(loadAssetInfo.AssetName, elapseSeconds / loadAssetInfo.DelaySeconds, loadAssetInfo.UserData); } current = current.Next; } } } if (m_LoadSceneInfos.Count > 0) { LinkedListNode <LoadSceneInfo> current = m_LoadSceneInfos.First; while (current != null) { LoadSceneInfo loadSceneInfo = current.Value; if (loadSceneInfo.AsyncOperation.isDone) { if (loadSceneInfo.AsyncOperation.allowSceneActivation) { if (loadSceneInfo.LoadSceneCallbacks.LoadSceneSuccessCallback != null) { loadSceneInfo.LoadSceneCallbacks.LoadSceneSuccessCallback(loadSceneInfo.SceneAssetName, (float)(DateTime.Now - loadSceneInfo.StartTime).TotalSeconds, loadSceneInfo.UserData); } } else { if (loadSceneInfo.LoadSceneCallbacks.LoadSceneFailureCallback != null) { loadSceneInfo.LoadSceneCallbacks.LoadSceneFailureCallback(loadSceneInfo.SceneAssetName, LoadResourceStatus.NotExist, "Can not load this scene from asset database.", loadSceneInfo.UserData); } } LinkedListNode <LoadSceneInfo> next = current.Next; m_LoadSceneInfos.Remove(loadSceneInfo); current = next; } else { if (loadSceneInfo.LoadSceneCallbacks.LoadSceneUpdateCallback != null) { loadSceneInfo.LoadSceneCallbacks.LoadSceneUpdateCallback(loadSceneInfo.SceneAssetName, loadSceneInfo.AsyncOperation.progress, loadSceneInfo.UserData); } current = current.Next; } } } if (m_UnloadSceneInfos.Count > 0) { LinkedListNode <UnloadSceneInfo> current = m_UnloadSceneInfos.First; while (current != null) { UnloadSceneInfo unloadSceneInfo = current.Value; if (unloadSceneInfo.AsyncOperation.isDone) { if (unloadSceneInfo.AsyncOperation.allowSceneActivation) { if (unloadSceneInfo.UnloadSceneCallbacks.UnloadSceneSuccessCallback != null) { unloadSceneInfo.UnloadSceneCallbacks.UnloadSceneSuccessCallback(unloadSceneInfo.SceneAssetName, unloadSceneInfo.UserData); } } else { if (unloadSceneInfo.UnloadSceneCallbacks.UnloadSceneFailureCallback != null) { unloadSceneInfo.UnloadSceneCallbacks.UnloadSceneFailureCallback(unloadSceneInfo.SceneAssetName, unloadSceneInfo.UserData); } } LinkedListNode <UnloadSceneInfo> next = current.Next; m_UnloadSceneInfos.Remove(unloadSceneInfo); current = next; } else { current = current.Next; } } } }
private void Update() { if (m_LoadSceneInfos.Count > 0) { LinkedListNode <LoadSceneInfo> current = m_LoadSceneInfos.First; while (current != null) { LoadSceneInfo loadSceneInfo = current.Value; if (loadSceneInfo.AsyncOperation.isDone) { if (loadSceneInfo.AsyncOperation.allowSceneActivation) { if (loadSceneInfo.LoadSceneCallbacks.LoadSceneSuccessCallback != null) { loadSceneInfo.LoadSceneCallbacks.LoadSceneSuccessCallback(loadSceneInfo.SceneAssetName, (float)(DateTime.Now - loadSceneInfo.StartTime).TotalSeconds, loadSceneInfo.UserData); } } else { if (loadSceneInfo.LoadSceneCallbacks.LoadSceneFailureCallback != null) { loadSceneInfo.LoadSceneCallbacks.LoadSceneFailureCallback(loadSceneInfo.SceneAssetName, LoadResourceStatus.NotExist, "Can not load this scene from asset database.", loadSceneInfo.UserData); } } LinkedListNode <LoadSceneInfo> next = current.Next; m_LoadSceneInfos.Remove(loadSceneInfo); current = next; } else { if (loadSceneInfo.LoadSceneCallbacks.LoadSceneUpdateCallback != null) { loadSceneInfo.LoadSceneCallbacks.LoadSceneUpdateCallback(loadSceneInfo.SceneAssetName, loadSceneInfo.AsyncOperation.progress, loadSceneInfo.UserData); } current = current.Next; } } } if (m_UnloadSceneInfos.Count > 0) { LinkedListNode <UnloadSceneInfo> current = m_UnloadSceneInfos.First; while (current != null) { UnloadSceneInfo unloadSceneInfo = current.Value; if (unloadSceneInfo.AsyncOperation.isDone) { if (unloadSceneInfo.AsyncOperation.allowSceneActivation) { if (unloadSceneInfo.UnloadSceneCallbacks.UnloadSceneSuccessCallback != null) { unloadSceneInfo.UnloadSceneCallbacks.UnloadSceneSuccessCallback(unloadSceneInfo.SceneAssetName, unloadSceneInfo.UserData); } } else { if (unloadSceneInfo.UnloadSceneCallbacks.UnloadSceneFailureCallback != null) { unloadSceneInfo.UnloadSceneCallbacks.UnloadSceneFailureCallback(unloadSceneInfo.SceneAssetName, unloadSceneInfo.UserData); } } LinkedListNode <UnloadSceneInfo> next = current.Next; m_UnloadSceneInfos.Remove(unloadSceneInfo); current = next; } else { current = current.Next; } } } }
private void Update() { if (m_LoadAssetInfos.Count > 0) { LinkedListNode <LoadAssetInfo> current = m_LoadAssetInfos.First; while (current != null) { LoadAssetInfo loadAssetInfo = current.Value; float elapseSeconds = (float)(DateTime.Now - loadAssetInfo.StartTime).TotalSeconds; if (elapseSeconds >= loadAssetInfo.DelaySeconds) { UnityEngine.Object asset = null; #if UNITY_EDITOR if (loadAssetInfo.AssetType != null) { asset = AssetDatabase.LoadAssetAtPath(loadAssetInfo.AssetName, loadAssetInfo.AssetType); } else { asset = AssetDatabase.LoadMainAssetAtPath(loadAssetInfo.AssetName); } #endif if (asset != null) { if (loadAssetInfo.LoadAssetCallbacks.LoadAssetSuccessCallback != null) { loadAssetInfo.LoadAssetCallbacks.LoadAssetSuccessCallback(loadAssetInfo.AssetName, asset, elapseSeconds, loadAssetInfo.UserData); } } else { if (loadAssetInfo.LoadAssetCallbacks.LoadAssetFailureCallback != null) { loadAssetInfo.LoadAssetCallbacks.LoadAssetFailureCallback(loadAssetInfo.AssetName, LoadResourceStatus.NotExist, "Can not load this asset from asset database.", loadAssetInfo.UserData); } } LinkedListNode <LoadAssetInfo> next = current.Next; m_LoadAssetInfos.Remove(loadAssetInfo); current = next; } else { if (loadAssetInfo.LoadAssetCallbacks.LoadAssetUpdateCallback != null) { loadAssetInfo.LoadAssetCallbacks.LoadAssetUpdateCallback(loadAssetInfo.AssetName, elapseSeconds / loadAssetInfo.DelaySeconds, loadAssetInfo.UserData); } current = current.Next; } } } else { if (_startLoadAssets) { _startLoadAssets = false; _loadAssetsComplete(this, new GameFramework.Resource. LoadAssetsCompleteEventArgs (_assetNames.ToArray(), _assets.ToArray(), _duration, _userData)); _clerCache(); } } if (m_LoadSceneInfos.Count > 0) { LinkedListNode <LoadSceneInfo> current = m_LoadSceneInfos.First; while (current != null) { LoadSceneInfo loadSceneInfo = current.Value; if (loadSceneInfo.AsyncOperation.isDone) { if (loadSceneInfo.AsyncOperation.allowSceneActivation) { if (loadSceneInfo.LoadSceneCallbacks.LoadSceneSuccessCallback != null) { loadSceneInfo.LoadSceneCallbacks.LoadSceneSuccessCallback(loadSceneInfo.SceneAssetName, (float)(DateTime.Now - loadSceneInfo.StartTime).TotalSeconds, loadSceneInfo.UserData); } } else { if (loadSceneInfo.LoadSceneCallbacks.LoadSceneFailureCallback != null) { loadSceneInfo.LoadSceneCallbacks.LoadSceneFailureCallback(loadSceneInfo.SceneAssetName, LoadResourceStatus.NotExist, "Can not load this scene from asset database.", loadSceneInfo.UserData); } } LinkedListNode <LoadSceneInfo> next = current.Next; m_LoadSceneInfos.Remove(loadSceneInfo); current = next; } else { if (loadSceneInfo.LoadSceneCallbacks.LoadSceneUpdateCallback != null) { loadSceneInfo.LoadSceneCallbacks.LoadSceneUpdateCallback(loadSceneInfo.SceneAssetName, loadSceneInfo.AsyncOperation.progress, loadSceneInfo.UserData); } current = current.Next; } } } if (m_UnloadSceneInfos.Count > 0) { LinkedListNode <UnloadSceneInfo> current = m_UnloadSceneInfos.First; while (current != null) { UnloadSceneInfo unloadSceneInfo = current.Value; if (unloadSceneInfo.AsyncOperation.isDone) { if (unloadSceneInfo.AsyncOperation.allowSceneActivation) { if (unloadSceneInfo.UnloadSceneCallbacks.UnloadSceneSuccessCallback != null) { unloadSceneInfo.UnloadSceneCallbacks.UnloadSceneSuccessCallback(unloadSceneInfo.SceneAssetName, unloadSceneInfo.UserData); } } else { if (unloadSceneInfo.UnloadSceneCallbacks.UnloadSceneFailureCallback != null) { unloadSceneInfo.UnloadSceneCallbacks.UnloadSceneFailureCallback(unloadSceneInfo.SceneAssetName, unloadSceneInfo.UserData); } } LinkedListNode <UnloadSceneInfo> next = current.Next; m_UnloadSceneInfos.Remove(unloadSceneInfo); current = next; } else { current = current.Next; } } } }