/// <summary> /// 资源加载完毕 /// </summary> /// <param name="request"></param> private void LoadFinish(ResLoadRequest request) { if (request != null) { ILoadListent listen = null; for (int i = 0; i < request.listents.Count; i++) { listen = request.listents[i]; if (request.asset != null) { AssetPack pack = new AssetPack(request.type, request.isKeepInMemory); pack.asset = request.asset; mAssetPacksDic.Add(request.assetName,pack); listen.Succeed(request.asset); } else { listen.Failed(); } } } }
private void LoadAsset(string prefabName, Type type, ILoadListent callBack, bool isKeepInMemory) { if (string.IsNullOrEmpty(prefabName)) { if (callBack != null) callBack.Failed(); return; } //如果缓存中包含此资源包则直接返回 if (mAssetPacksDic.ContainsKey(prefabName)) { if (mAssetPacksDic[prefabName].asset == null) { if (callBack != null) { callBack.Failed(); } } else { callBack.Succeed(mAssetPacksDic[prefabName].asset); } return; //如果找到就不在往下执行 } //如果不包含,则先判断当前正在加载的列表中是否包含,如果包含则直接把回调事件加入 for (int i = 0; i < mLoadList.Count; i++) { ResLoadRequest request = mLoadList[i]; if (!request.assetName.Equals(prefabName)) continue; request.AddListent(callBack); return; } foreach (ResLoadRequest request in mWaitLoads) { if (!request.assetName.Equals(prefabName)) continue; request.AddListent(callBack); return; } //如果都不存在的话,则加载进等待队列 ResLoadRequest loadRequest = new ResLoadRequest(prefabName, isKeepInMemory, type); loadRequest.listents.Add(callBack); mWaitLoads.Enqueue(loadRequest); }