コード例 #1
0
 // 异步加载资源包
 public void loadAssetBundleAsync(AssetBundleLoadCallback callback, object userData)
 {
     // 正在加载,则加入等待列表
     if (mLoadState == LOAD_STATE.LS_LOADING || mLoadState == LOAD_STATE.LS_WAIT_FOR_LOAD)
     {
         if (callback != null)
         {
             mLoadCallback.Add(callback);
         }
     }
     // 如果还未加载,则加载资源包,回调加入列表
     else if (mLoadState == LOAD_STATE.LS_UNLOAD)
     {
         if (callback != null)
         {
             mLoadCallback.Add(callback);
             mLoadUserData.Add(userData);
         }
         // 先确保所有依赖项已经加载
         loadParentAsync();
         mLoadState = LOAD_STATE.LS_WAIT_FOR_LOAD;
         // 通知AssetBundleLoader请求异步加载AssetBundle,只在真正开始异步加载时才标记为正在加载状态,此处只是加入等待列表
         mResourceManager.mAssetBundleLoader.requestLoadAssetBundle(this);
     }
     // 加载完毕,直接调用回调
     else if (mLoadState == LOAD_STATE.LS_LOADED)
     {
         callback?.Invoke(this, userData);
     }
 }
コード例 #2
0
 public SceneSystem()
 {
     mSceneList          = new Dictionary <string, SceneInstance>();
     mSceneRegisteList   = new Dictionary <string, SceneRegisteInfo>();
     mLoadList           = new List <SceneInstance>();
     mDirectLoadCallback = new List <SceneLoadCallback>();
     mSceneLoadCallback  = onSceneAssetBundleLoaded;
 }
コード例 #3
0
 public void loadAssetBundleAsync(string bundleName, AssetBundleLoadCallback callback, object userData)
 {
     if (mLoadSource == LOAD_SOURCE.LS_RESOURCES)
     {
         // 从Resource加载不能加载AssetBundle
         callback?.Invoke(null, userData);
     }
     else if (mLoadSource == LOAD_SOURCE.LS_ASSET_BUNDLE)
     {
         mAssetBundleLoader.loadAssetBundleAsync(bundleName.ToLower(), callback, userData);
     }
 }
コード例 #4
0
 // 异步加载资源包
 public void loadAssetBundleAsync(string bundleName, AssetBundleLoadCallback callback, object userData)
 {
     if (!mInited)
     {
         logError("AssetBundleLoader is not inited!");
         callback?.Invoke(null, userData);
         return;
     }
     if (mAssetBundleInfoList.ContainsKey(bundleName))
     {
         mAssetBundleInfoList[bundleName].loadAssetBundleAsync(callback, userData);
     }
     else
     {
         logError("can not find AssetBundle : " + bundleName);
     }
 }
コード例 #5
0
 // 异步加载资源包
 public void loadAssetBundleAsync(string bundleName, AssetBundleLoadCallback callback, object userData = null)
 {
     if (!mInited)
     {
         logError("AssetBundleLoader is not inited!");
         callback?.Invoke(null, userData);
         return;
     }
     if (mAssetBundleInfoList.TryGetValue(bundleName, out AssetBundleInfo info))
     {
         info.loadAssetBundleAsync(callback, userData);
     }
     else
     {
         logError("can not find AssetBundle : " + bundleName);
     }
 }
コード例 #6
0
        /// <summary>
        /// 异步加载
        /// </summary>
        /// <param name="_hasName"></param>
        /// <param name="callback"></param>
        /// <returns></returns>
        private AssetBundleObject LoadAssetBundleAsync(string _hasName, AssetBundleLoadCallback callback,
                                                       bool bPublic = false)
        {
            AssetBundleObject abObj = null;

            if (_loadedABList.ContainsKey(_hasName)) //已经加载
            {
                abObj = _loadedABList[_hasName];
                DoDependsRef(abObj);
                callback(abObj.assetbundle);

                return(abObj);
            }
            else if (_loadingABList.ContainsKey(_hasName)) //正在加载
            {
                abObj = _loadingABList[_hasName];
                DoDependsRef(abObj);
                abObj._callbacks.Add(callback);
                return(abObj);
            }
            else if (_readyABList.ContainsKey(_hasName))
            {
                abObj = _readyABList[_hasName];
                DoDependsRef(abObj);
                abObj._callbacks.Add(callback);
                return(abObj);
            }

            abObj          = new AssetBundleObject();
            abObj.name     = _hasName;
            abObj.bPublic  = bPublic;
            abObj.refCount = 1;
            abObj._callbacks.Add(callback);
            ///先加载依赖项
            ///这里设置一个约定
            ///公共资源的依赖项必须放在公共资源文件夹中
            ///即不能放在CNS,EN等文件夹中
            string[] dependsData = null;

            if (_dependsDataList.ContainsKey(_hasName))
            {
                Debug.Log("加载物体的名字" + _hasName);
                dependsData = _dependsDataList[_hasName];
                foreach (string name in dependsData)
                {
                    Debug.Log(name);
                }
            }

            if (dependsData != null && dependsData.Length > 0)
            {
                abObj._dependLoadingCount = dependsData.Length;
                //依赖依次加载
                foreach (var dpName in dependsData)
                {
                    AssetBundleObject dpObj = LoadAssetBundleAsync(dpName,
                                                                   (ab) =>
                    {
                        if (abObj._dependLoadingCount <= 0)
                        {
                            Debug.LogError("LoadAssetBundle: " + _hasName + " depends error");
                        }
                        else
                        {
                            abObj._dependLoadingCount--;
                            //依赖加载完成,回调
                            if (abObj._dependLoadingCount == 0 && abObj.request != null && abObj.request.isDone)
                            {
                                DoLoadedCallFun(abObj);
                            }
                        }
                    }, bPublic);
                    abObj.depends.Add(dpObj);
                }
            }

            if (_loadingABList.Count < MAX_LOADING_NUM)
            {
                DoLoad(abObj);
                _loadingABList.Add(_hasName, abObj);
            }
            else
            {
                _readyABList.Add(_hasName, abObj);
            }

            return(abObj);
        }
コード例 #7
0
 /// <summary>
 /// 异步加载
 /// 每次调用refCount +1
 /// </summary>
 /// <param name="_hasName"></param>
 /// <param name="callback"></param>
 public void LoadAsync(string _hasName, AssetBundleLoadCallback callback, bool bPublic = false)
 {
     _hasName = GetHashName(_hasName);
     LoadAssetBundleAsync(_hasName, callback, bPublic);
 }