private BaseAsset CreateAsset(AssetData data, ResObj resource) { if (resource == null || resource.Content == null) { JW.Common.Log.LogE("AssetManager.CreateAsset : invalid parameter - {0}", data.Name); return(null); } data.Callback = null; BaseAsset ba = data.Factory.CreateObject(); if (ba == null) { JW.Common.Log.LogE("AssetManager.CreateAsset : failed to create asset - {0}", data.Name); return(null); } ba.BaseData = data; ba.Resource = resource; if (!AssetProcessor.ProcessCreate(ba)) { JW.Common.Log.LogE("AssetManager.CreateAsset : failed to process create - {0}", data.Name); ba.BaseData.Callback = null; ba.BaseData.Factory = null; ba.Resource = null; data.Factory.DestroyObject(ba); return(null); } //AssetProcessor.ProcessAssociateResource(ba); return(ba); }
private IEnumerator AsynchronousLoad_LoadAssetBundle(JWObjList <string> stringList, JWArrayList <AssetData> assetDataList) { while (true) { stringList.Clear(); assetDataList.Clear(); for (int i = 0; i < _data.Count;) { AssetData data = _data[i]; if (data.Priority != _loadAssetBundlePriority) { ++i; continue; } _data.RemoveAt(i); if (_assetManager.GetCacheCount(data.Name) >= data.Count) { if (data.Callback != null) { assetDataList.Add(data); } continue; } LoadData loadData; loadData.Data = data; loadData.LoadBundleState = LoadStateLoading; loadData.Request = null; bool insert = false; for (int j = _resourceRequesting.Count - 1; j >= 0; --j) { if (_resourceRequesting[j].Data.Priority <= data.Priority) { _resourceRequesting.Insert(j + 1, loadData); insert = true; break; } } if (!insert) { _resourceRequesting.Insert(0, loadData); } stringList.Add(data.Filename); if (_loadAssetBundlePriority >= LoadPriority.Preprocess) { break; } } yield return(null); if (stringList.Count > 0) { #if USE_PACK_RES BundleMediator.GetInstance().LoadBundle(stringList, OnBundleLoadCompleted); #else OnBundleLoadCompleted(stringList, true); #endif } yield return(null); for (int i = 0; i < assetDataList.Count; i++) { AssetData data = assetDataList[i]; if (data.Callback != null) { data.Callback.OnLoadAssetCompleted(data.Name, AssetLoadResult.Success, null); yield return(null); } } yield return(InstructionEnd); } }
/// <summary> /// 装载 /// </summary> /// <param name="data">资产数据</param> /// <param name="clone">是否Clone一个副本</param> /// <returns>资产</returns> public BaseAsset Load(ref AssetData data, bool clone) { if (string.IsNullOrEmpty(data.Filename)) { JW.Common.Log.LogE("AssetManager.Load : invalid parameter"); return(null); } //缓存找 BaseAsset ba = _cache.GetAsset(data.Name); if (ba != null) { //缓存复制 if (clone) { BaseAsset cloneBa = AssetProcessor.ProcessClone(ba); _cache.AddAsset(ba); ba = cloneBa; } if (ba != null) { if (!AssetProcessor.ProcessCreate(ba)) { JW.Common.Log.LogE("AssetManager.CreateAsset : failed to process create - {0}", data.Name); ba.BaseData.Callback = null; ba.BaseData.Factory = null; ba.Resource = null; data.Factory.DestroyObject(ba); return(null); } _usingAsset.Add(ba); } return(ba); } //没在缓存 同步创建 ResObj resource = ResService.GetResource(data.Filename); if (resource == null) { JW.Common.Log.LogE("AssetManager.Load : failed to load resource - {0}", data.Filename); return(null); } if (resource.Content == null) { JW.Common.Log.LogE("AssetManager.Load : failed to load resource - {0}", data.Filename); ResService.UnloadResource(resource); return(null); } ba = CreateAsset(data, resource); if (ba == null) { ResService.UnloadResource(resource); return(null); } if (clone) { BaseAsset cloneBa = AssetProcessor.ProcessClone(ba); _cache.AddAsset(ba); ba = cloneBa; } if (ba != null) { _usingAsset.Add(ba); } return(ba); }
/// <summary> /// 添加任务 /// </summary> /// <param name="assetData">资源数据</param> public void AddTask(ref AssetData assetData) { if (assetData.Type == AssetType.UnityScene && assetData.Priority != LoadPriority.Wait) { JW.Common.Log.LogE("Loader.AddTask : invalid parameter - {0}", assetData.Name); assetData.Priority = LoadPriority.Wait; } if (_synLoading && (assetData.Priority == LoadPriority.Wait)) { JW.Common.Log.LogE("Loader.AddTask : load is runing, can't add wait load asset - {0}", assetData.Name); return; } if (assetData.Priority != LoadPriority.Wait) { //进行中 重复 for (int i = 0; i < _resourceRequesting.Count; i++) { LoadData loadData = _resourceRequesting[i]; if (assetData.Type == loadData.Data.Type && assetData.Name.Equals(loadData.Data.Name, StringComparison.OrdinalIgnoreCase) && (assetData.Callback == loadData.Data.Callback)) { loadData.Data = assetData; _resourceRequesting.RemoveAt(i); bool insert = false; for (int j = _resourceRequesting.Count - 1; j >= 0; j--) { if (_resourceRequesting[j].Data.Priority <= loadData.Data.Priority) { _resourceRequesting.Insert(j + 1, loadData); insert = true; break; } } if (!insert) { _resourceRequesting.Insert(0, loadData); } return; } } } //重复? for (int i = 0; i < _data.Count; i++) { AssetData data = _data[i]; if (assetData.Callback == data.Callback && assetData.Type == data.Type && assetData.Name.Equals(data.Name, StringComparison.OrdinalIgnoreCase)) { _data.RemoveAt(i); break; } } for (int i = _data.Count - 1; i >= 0; --i) { if (_data[i].Priority <= assetData.Priority) { _data.Insert(i + 1, assetData); return; } } _data.Insert(0, assetData); }