Пример #1
0
 /// <summary>
 /// 加载一个AB
 /// </summary>
 /// <param name="ABName">资源名称</param>
 /// <param name="callBack">回调函数</param>
 /// <param name="keepInMemory">是否常驻内存</param>
 /// <param name="Async">是否异步加载</param>
 public void LoadAB(string ABName, System.Action <AssetBundle> callBack = null
                    , bool keepInMemory = false, bool Async = false)
 {
     if (mCacheABDic.ContainsKey(ABName))
     {
         if (callBack != null)
         {
             callBack(mCacheABDic[ABName].ab);
         }
     }
     else
     {
         if (Async)
         {
             foreach (LoadPack load in mLoading)
             {
                 if (load.info.abName == ABName)
                 {
                     load.AddListener(callBack);
                     return;
                 }
             }
             foreach (LoadPack load in mWaitLoad)
             {
                 if (load.info.abName == ABName)
                 {
                     load.AddListener(callBack);
                     return;
                 }
             }
             LoadPack loadPack = new LoadPack();
             loadPack.info = new PackInfo(name, null, keepInMemory);
             loadPack.AddListener(callBack);
             mWaitLoad.Enqueue(loadPack);
         }
         else
         {
             AssetBundle ab   = AssetBundle.LoadFromFile(AppConst.AppExternalDataPath + "/" + ABName + AppConst.ExtName);
             PackInfo    info = new PackInfo(ABName, ab, keepInMemory);
             mCacheABDic[info.abName] = info;
             if (callBack != null)
             {
                 callBack(mCacheABDic[ABName].ab);
             }
         }
     }
 }
Пример #2
0
 public override void OnUpdate()
 {
     while (mWaitLoad.Count > 0 && mLoading.Count <= SystemInfo.processorCount)
     {
         LoadPack pack = mWaitLoad.Dequeue();
         mLoading.Add(pack);
         pack.Load();
     }
     if (mLoading.Count > 0)
     {
         for (int i = mLoading.Count - 1; i >= 0; i--)
         {
             if (mLoading[i].IsDone)
             {
                 mLoading[i].info.ab = mLoading[i].request.assetBundle;
                 mLoading[i].CallBack();
                 mCacheABDic.Add(mLoading[i].info.abName, mLoading[i].info);
                 mLoading.RemoveAt(i);
             }
         }
     }
 }