/// <summary> /// 反初始化 /// </summary> public void Uninitialize() { StopAllCoroutines(); _assetManager = null; _data.Clear(); _data = null; _resourceRequesting = null; _resourceDiscardRequest = null; _synLoading = false; }
/// <summary> /// 清除UIState 相关的任务 /// </summary> /// <param name="uiState">保留的UI状态</param> public void ClearTask(JWArrayList <string> uiState) { if (uiState == null) { JW.Common.Log.LogE("Loader.ClearTask : invalid parameter"); return; } if (_synLoading) { JW.Common.Log.LogE("Loader.ClearTask : load is running"); return; } for (int i = _resourceRequesting.Count - 1; i >= 0; --i) { LoadData loadData = _resourceRequesting[i]; if (!AssetAssistor.IsAssetDead(ref loadData.Data, uiState)) { continue; } if (loadData.Request != null) { if (_resourceDiscardRequest != null) { JW.Common.Log.LogE("Loader.ClearTask : _resourceDiscardRequest != null"); } _resourceDiscardRequest = loadData.Request; } _resourceRequesting.RemoveAt(i); } for (int i = _data.Count - 1; i >= 0; --i) { AssetData data = _data[i]; if (data.Priority == LoadPriority.Wait) { continue; } if (AssetAssistor.IsAssetDead(ref data, uiState)) { _data.RemoveAt(i); } } }
/// <summary> /// 取消任务 /// </summary> /// <param name="callback">回调</param> /// <param name="assetName">资源名或者类名</param> public void CancelTask(IAssetLoadCallback callback, string assetName) { if (callback == null) { JW.Common.Log.LogE("Loader.CancelTask : invalid parameter"); return; } if (_synLoading) { JW.Common.Log.LogE("Loader.CancelTask : load is running"); return; } for (int i = _resourceRequesting.Count - 1; i >= 0; --i) { LoadData loadData = _resourceRequesting[i]; if (loadData.Data.Callback != callback || (!string.IsNullOrEmpty(assetName) && !loadData.Data.Name.Equals(assetName, StringComparison.OrdinalIgnoreCase))) { continue; } if (loadData.Request != null) { if (_resourceDiscardRequest != null) { JW.Common.Log.LogE("Loader.ClearTask : _resourceDiscardRequest != null"); } _resourceDiscardRequest = loadData.Request; } _resourceRequesting.RemoveAt(i); } for (int i = _data.Count - 1; i >= 0; --i) { AssetData data = _data[i]; if (data.Callback == callback && (string.IsNullOrEmpty(assetName) || data.Name.Equals(assetName, StringComparison.OrdinalIgnoreCase))) { _data.RemoveAt(i); } } }
private IEnumerator AsynchronousLoad() { JWObjList <string> stringList = new JWObjList <string>(); JWArrayList <AssetData> assetDataList = new JWArrayList <AssetData>(); IEnumerator loadBundleEnumerator = AsynchronousLoad_LoadAssetBundle(stringList, assetDataList); IEnumerator loadResourceEnumerator = AsynchronousLoad_LoadResource(); IEnumerator instantiateEnumerator = AsynchronousLoad_InstantiateResource(); if (loadBundleEnumerator == null || loadResourceEnumerator == null || instantiateEnumerator == null) { yield break; } while (true) { yield return(null); if (_synLoading) { continue; } while (_resourceDiscardRequest != null) { if (!_resourceDiscardRequest.isDone) { yield return(null); continue; } if (_resourceDiscardRequest.resource != null) { ResService.UnloadResource(_resourceDiscardRequest.resource); } _resourceDiscardRequest = null; yield return(null); } if (_resourceRequesting.Count > 0) { while (instantiateEnumerator.MoveNext()) { if (instantiateEnumerator.Current == InstructionEnd) { break; } yield return(null); } } if (_resourceRequesting.Count > 0) { while (loadResourceEnumerator.MoveNext()) { if (loadResourceEnumerator.Current == InstructionEnd) { break; } yield return(null); } } _loadAssetBundlePriority = AsynchronousLoad_CalculatePriority(); if (_loadAssetBundlePriority != int.MaxValue && (_loadAssetBundlePriority < LoadPriority.Preprocess || (!BundleService.GetInstance().IsWorking() && _resourceDiscardRequest == null && _resourceRequesting.Count == 0))) { while (loadBundleEnumerator.MoveNext()) { if (loadBundleEnumerator.Current == InstructionEnd) { break; } yield return(null); } } } }