コード例 #1
0
        bool DispatcherTask(ref AssetBundleContext context, ref AssetBundleTask task)
        {
            GameAssetBundle gameAssetBundle;

            if (task.IsDone(ref context, out gameAssetBundle))
            {
                //set or not ?
                //task.FinishTime = Time.realtimeSinceStartup;
                task.Result.Result      = !gameAssetBundle.IsException();
                task.Result.LoadObject  = gameAssetBundle.LoadAsset(task.AssetPath);
                task.Result.RuntimeInfo = task.AssetInfo;
                //因为这里只改边list 中的task存储内容,不涉及context 非reference的修改,所以没有关系
                task.Result.UpdateReferenceAction = AddRefrence;

                //notify
                if (task.Result.ResultCallback != null)
                {
                    task.Result.ResultCallback(ref task.Result);
                }
                else if (task.IsPreLoad())
                {
                    if (task.PinTime < 0)
                    {
                        AssetBundleFunction.AddRef(ref context, ref gameAssetBundle, task.AssetPath);
#if UNITY_EDITOR
                        context.Cache.UpdateAssetBundle(task.AssetBundleName, ref gameAssetBundle);
#endif
                    }
                }
                else if (task.TaskResType == TaskResType.GameObject)
                {
                    task.Result.Instantiate();
                }
                else if (task.TaskResType == TaskResType.Scene)
                {
                    if (!task.Result.Hide)
                    {
                        task.Result.LoadScene();
                    }
                }


                Debug.LogFormat("DisposeTask : {0} dispose", task);
                DisposeTask(ref task);
                return(true);
            }

            return(false);
        }
コード例 #2
0
        bool LoadAssetBundle(ref AssetBundleContext context, ref AssetBundleTask task)
        {
            bool result = false;

            if (task.FinishTime > 0)
            {
                result = true;
            }
            else
            {
                if (task.IsLoad())
                {
                    LoadDependency(ref context, ref task, ref result);

                    LoadSubTask(ref context, ref task, ref result);

                    int finishcnt;
                    int totalcnt;
                    if (task.IsSubAllDone(ref context, out finishcnt, out totalcnt)) //
                    {
                        GameAssetBundle gameAssetBundle;
                        if (context.Cache.GetAssetBundle(task.AssetBundleName, out gameAssetBundle))
                        {
                            if (task.Result.ProgresCallback != null)
                            {
                                ProgressArgs progressArgs = new ProgressArgs((float)finishcnt / (totalcnt + 1), 0, task.AssetPath, false);
                                task.Result.ProgresCallback(ref progressArgs);
                            }

                            Load(ref context, ref task, ref gameAssetBundle, ref result, true);
                            context.Cache.UpdateAssetBundle(task.AssetBundleName, ref gameAssetBundle);
                        }
                        else
                        {
                            Debug.LogErrorFormat("not found gameassetbundle :{0}", task.AssetBundleName);
                            AddException(ref context, task.AssetPath);
                        }
                    }
                    else
                    {
                        if (task.Result.ProgresCallback != null)
                        {
                            ProgressArgs progressArgs = new ProgressArgs((float)finishcnt / (totalcnt + 1), 0, task.AssetPath, false);
                            task.Result.ProgresCallback(ref progressArgs);
                        }
                    }
                }
                else if (task.IsUnLoad())
                {
                    GameAssetBundle gameAssetBundle;
                    if (context.Cache.GetAssetBundle(task.AssetBundleName, out gameAssetBundle))
                    {
                        UnLoad(ref task, ref gameAssetBundle, ref result);
                    }
                    else
                    {
                        Debug.LogErrorFormat("not found gameassetbundle :{0}", task.AssetBundleName);
                        AddException(ref context, task.AssetPath);
                    }
                }
                else if (task.IsPreLoad())
                {
                    LoadDependency(ref context, ref task, ref result);
                    PreLoadSubTask(ref context, ref task, ref result);

                    int finishcnt;
                    int totalcnt;

                    if (task.IsSubAllDone(ref context, out finishcnt, out totalcnt)) //
                    {
                        GameAssetBundle gameAssetBundle;
                        if (context.Cache.GetAssetBundle(task.AssetBundleName, out gameAssetBundle))
                        {
                            if (task.Result.ProgresCallback != null)
                            {
                                ProgressArgs progressArgs = new ProgressArgs((float)finishcnt / (totalcnt + 1), 0, task.AssetPath, false);
                                task.Result.ProgresCallback(ref progressArgs);
                            }

                            PreLoad(ref context, ref task, ref gameAssetBundle, ref result, true);
                            context.Cache.UpdateAssetBundle(task.AssetBundleName, ref gameAssetBundle);
                        }
                        else
                        {
                            Debug.LogErrorFormat("not found gameassetbundle :{0}", task.AssetBundleName);
                            AddException(ref context, task.AssetPath);
                        }
                    }
                    else
                    {
                        if (task.Result.ProgresCallback != null)
                        {
                            ProgressArgs progressArgs = new ProgressArgs((float)finishcnt / (totalcnt + 1), 0, task.AssetPath, false);
                            task.Result.ProgresCallback(ref progressArgs);
                        }
                    }
                }
            }

            return(result);
        }