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); }
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); }