protected IEnumerator DoGetAssetAsync(string assetName, LoadAssetCallback callback) { Object obj; if (_loadedAssets.TryGetValue(assetName, out obj)) { yield return(null); //隔一帧. } else { if (assetBundle != null) { var request = assetBundle.LoadAssetAsync(assetName); while (!request.isDone) { yield return(null); } obj = request.asset; if (obj != null) { PushLoadedAsset(assetName, obj); } } } if (callback != null) { callback.Invoke(obj); } }
public override int LoadAsset(string rc, LoadAssetCallback callback, object userdata = null) { string path = GetNameWithoutExtension(rc); ResourceRequest rr = Resources.LoadAsync(path); rr.completed += (AsyncOperation ao) => { LoadResult lr = new LoadResult(); lr.isSuccess = ao.isDone; lr.assets = new UnityEngine.Object[1] { rr.asset }; lr.assetNames = new string[1] { rc }; lr.userData = userdata; if (ResourceCallBack != null) { ResourceCallBack.Invoke(lr); } if (callback != null) { callback.Invoke(lr); } }; // Resources 读取暂时一律按照1处理 return(1); }
public void OnLoadComplete(AssetBundle assetBundle) { if (mStatus != TaskStatus.Canceled) { mStatus = TaskStatus.Completed; if (onComplete != null) { onComplete.Invoke(assetBundle); } onComplete = null; } //else //{ // Debug.LogFormat("LoadAssetBundleTask OnLoadComplete but cancel"); //} }
public override int[] LoadAssets(string[] paths, LoadAssetCallback callback, LoadAssetCallback singleCallback, object userdata = null) { if (paths == null || paths.Length == 0) { return(null); } int length = paths.Length; int[] refCounts = new int[length]; List <string> errorList = new List <string>(); LoadResult lr = new LoadResult(); lr.assets = new UnityEngine.Object[length]; lr.assetNames = new string[length]; lr.userData = userdata; int sign = 0; for (int i = 0; i < length; i++) { // Resources 读取暂时一律按照1处理 refCounts[i] = 1; string originPath = paths[i]; string path = GetNameWithoutExtension(originPath); GameLogger.DebugLog(LOG_CHANNEL.ASSET, "Load Asset " + path); ResourceRequest rr = Resources.LoadAsync(path); rr.completed += (AsyncOperation ao) => { sign++; int currentIndex = sign - 1; bool isSuccess = ao.isDone; GameLogger.DebugLog(LOG_CHANNEL.ASSET, string.Format("Asset: [{0}] Loaded, Success: [{1}]", originPath, isSuccess)); if (lr.isSuccess) { lr.isSuccess = isSuccess; } if (!isSuccess) { errorList.Add(originPath); } else { lr.assets[currentIndex] = rr.asset; lr.assetNames[currentIndex] = originPath; if (ResourceCallBack != null) { ResourceCallBack.Invoke(lr); } } LoadResult lrSingle = new LoadResult(); lrSingle.isSuccess = isSuccess; lrSingle.assets = new UnityEngine.Object[1] { rr.asset }; lrSingle.assetNames = new string[1] { originPath }; lrSingle.userData = userdata; if (singleCallback != null) { singleCallback.Invoke(lrSingle); } if (sign == length) { lr.errorAssetNames = errorList.ToArray(); if (callback != null) { callback.Invoke(lr); } } }; } return(refCounts); }