예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
        }
예제 #3
0
 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");
     //}
 }
예제 #4
0
        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);
        }