/// <summary> /// 加载AB资源 /// </summary> /// <param name="assetName">资源名称</param> /// <param name="listener">回调</param> /// <param name="isKeepInMemory">是否常驻内存</param> /// <param name="isAsync">是否异步</param> private void LoadForAB(string assetName, ILoadListener listener, bool isKeepInMemory, bool isAsync) { if (!mABInfoDic.ContainsKey(assetName)) { if (listener != null) { listener.LoadFailure(assetName); } Debug.LogError("这个资源不存在AB里面 资源名称:" + assetName); return; } for (int i = 0; i < mLoadIn.Count; i++) { if (mLoadIn[i].AssetName == assetName) { Log.Error("正在加载这个资源 资源名称:" + assetName); return; } } for (int i = 0; i < mLoadWait.Count; i++) { if (mLoadWait.ToArray()[i].AssetName == assetName) { Log.Error("这个资源已经等待加载了 资源名称:" + assetName); return; } } ABInfo abInfo = GetABInfo(assetName); ABReq req = new ABReq(abInfo.AssetName, abInfo.ABName, listener, isKeepInMemory, isAsync); mLoadWait.Enqueue(req); }
/// <summary> /// AB加载完成回调 /// </summary> /// <param name="req"></param> private void LoadABFinish(ABReq req) { AssetBundle assetBundle = req.ABWww.assetBundle; // req.WWWDispose(); if (assetBundle == null) { if (req.LoadListener != null) { req.LoadListener.LoadFailure(req.AssetName); } } else { if (req.IsAsync) { StartCoroutine(LoadABAsync(assetBundle, req.AssetName, req.LoadListener, req.IsKeepInMemory)); } else { ABInfo abInfo = GetABInfo(req.AssetName); object obj = assetBundle.LoadAsset(abInfo.FullName); AssetPack asset = new AssetPack(abInfo.AssetName, obj, req.IsKeepInMemory); if (mAssetPackDic.ContainsKey(asset.AssetName)) { mAssetPackDic[asset.AssetName] = asset; } else { mAssetPackDic.Add(asset.AssetName, asset); } req.LoadListener.LoadFinish(obj); AddAssetToStackTop(asset.AssetName); assetBundle.Unload(false); } } }