public IEnumerator MonoLoadByAssetsBundleAsync(string path, AssetBundleLoadCallBack callback) { AssetBundleCreateRequest status = AssetBundle.LoadFromFileAsync(path); LoadState loadState = new LoadState(); while (!status.isDone) { loadState.UpdateProgress(status); callback(loadState, null); yield return(0); } status.assetBundle.name = path; loadState.UpdateProgress(status); callback(loadState, status.assetBundle); }
/// <summary> // 异步加载 /// </summary> /// <param name="abName"></param> /// <param name="callFun"></param> private AssetBundleObject LoadAssetBundleAsync(string abName, AssetBundleLoadCallBack callFun) { AssetBundleObject obj = null; var status = GetobjStatus(abName); // 未加载过 if (status == objStatus.None) { obj = Createobj(abName); obj.CallFunList.Add(callFun); // 移入准备队列 PutobjInQueue(objStatus.Ready, obj); return(obj); } obj = GetobjFromQueue(abName); if (obj == null) { Debug.Log("obj no found!!! -> " + abName); return(null); } DoDependsRef(obj); if (status == objStatus.Loaded) // 已加载 { callFun?.Invoke(obj.AssetBundle); } else { obj.CallFunList.Add(callFun); } return(obj); }
public IEnumerator MonoLoadByAssetsBundleAsync(string path, AssetBundleLoadCallBack callback) { #if !UNITY_WEBGL AssetBundleCreateRequest status = AssetBundle.LoadFromFileAsync(path); LoadState loadState = new LoadState(); while (!status.isDone) { loadState.UpdateProgress(status); callback(loadState, null); yield return(0); } if (status.assetBundle != null) { status.assetBundle.name = path; } loadState.UpdateProgress(status); callback(loadState, status.assetBundle); #else WWW www = new WWW(path); LoadState loadState = new LoadState(); while (!www.isDone) { loadState.UpdateProgress(www); callback(loadState, null); yield return(0); } if (www.assetBundle != null) { www.assetBundle.name = path; } loadState.UpdateProgress(www); callback(loadState, www.assetBundle); #endif }
public void MonoLoadAssetsBundleMethod(string path, AssetBundleLoadCallBack callback) { StartCoroutine(MonoLoadByAssetsBundleAsync(path, callback)); }
/// <summary> /// 异步加载单个assetsbundle /// </summary> /// <param name="path"></param> /// <param name="callback"></param> public static void AssetsBundleLoadAsync(string path, AssetBundleLoadCallBack callback) { GetInstance().MonoLoadAssetsBundleMethod(path, callback); }
/// <summary> /// 异步加载 /// </summary> /// <param name="abName"></param> public void LoadAsync(string abName, AssetBundleLoadCallBack callFun) { LoadAssetBundleAsync(abName, callFun); }
private AssetBundleObject LoadAssetBundleAsync(string _hashName, AssetBundleLoadCallBack _callFun) { AssetBundleObject abObj = null; if (_loadedABList.ContainsKey(_hashName)) //已经加载 { abObj = _loadedABList[_hashName]; DoDependsRef(abObj); _callFun(abObj._ab); return(abObj); } else if (_loadingABList.ContainsKey(_hashName)) //在加载中 { abObj = _loadingABList[_hashName]; DoDependsRef(abObj); abObj._callFunList.Add(_callFun); return(abObj); } else if (_readyABList.ContainsKey(_hashName)) //在准备加载中 { abObj = _readyABList[_hashName]; DoDependsRef(abObj); abObj._callFunList.Add(_callFun); return(abObj); } //创建一个加载 abObj = new AssetBundleObject(); abObj._hashName = _hashName; abObj._refCount = 1; abObj._callFunList.Add(_callFun); //加载依赖项 string[] dependsData = null; if (_dependsDataList.ContainsKey(_hashName)) { dependsData = _dependsDataList[_hashName]; } if (dependsData != null && dependsData.Length > 0) { abObj._dependLoadingCount = dependsData.Length; foreach (var dpAssetName in dependsData) { var dpObj = LoadAssetBundleAsync(dpAssetName, (AssetBundle _ab) => { if (abObj._dependLoadingCount <= 0) { string errormsg = string.Format("LoadAssetbundle depend error ! assetName:{0}", _hashName); Debug.LogError(errormsg); return; } abObj._dependLoadingCount--; //依赖加载完 if (abObj._dependLoadingCount == 0 && abObj._request != null && abObj._request.isDone) { DoLoadedCallFun(abObj); } } ); abObj._depends.Add(dpObj); } } if (_loadingABList.Count < MAX_LOADING_COUNT) //正在加载的数量不能超过上限 { DoLoad(abObj); _loadingABList.Add(_hashName, abObj); } else { _readyABList.Add(_hashName, abObj); } return(abObj); }
//异步加载(已经加载直接回调),每次加载引用计数+1 public void LoadAsync(string _assetName, AssetBundleLoadCallBack callFun) { string hashName = GetHashName(_assetName); LoadAssetBundleAsync(hashName, callFun); }
public IEnumerator MonoLoadByAssetsBundleAsync(string path, AssetBundleLoadCallBack callback) { AssetBundleCreateRequest status = AssetBundle.LoadFromFileAsync(path); LoadState loadState = new LoadState(); while (!status.isDone) { loadState.UpdateProgress(status); callback(loadState, null); yield return 0; } status.assetBundle.name = path; loadState.UpdateProgress(status); callback(loadState, status.assetBundle); }