// 异步加载资源包 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); } }
public SceneSystem() { mSceneList = new Dictionary <string, SceneInstance>(); mSceneRegisteList = new Dictionary <string, SceneRegisteInfo>(); mLoadList = new List <SceneInstance>(); mDirectLoadCallback = new List <SceneLoadCallback>(); mSceneLoadCallback = onSceneAssetBundleLoaded; }
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); } }
// 异步加载资源包 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); } }
// 异步加载资源包 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); } }
/// <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); }
/// <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); }