/// <summary> /// 分组执行任务,每组加载ASYNC_TASK_NUM个任务 /// </summary> public void DoNextTask() { if (isStop) { return; } //获取一个任务 while (taskList.Count > 0 && curDoTaskConter < ASYNC_TASK_NUM) { var task = taskList[0]; taskList.RemoveAt(0); //这一步确保主资源最后加载,防止资源自动依赖丢失 if (task.IsMainAsset && taskList.Count != 0) { taskList.Add(task); continue; } //主资源才加载 IEnumeratorTool.StartCoroutine(IE_AsyncLoadAssetbundle(task, (ret) => { curDoTaskConter--; switch (ret) { case LoadAssetState.IsLoding: //正在加载,需要重新压入task taskList.Add(task); break; case LoadAssetState.Fail: case LoadAssetState.Success: { if (isStop) { return; } //判断任务进度 if (curDoTaskConter > 0) { this.DoNextTask(); } else { //总进度通知 IsComplete = true; var instObj = loder.LoadFormAssetBundle <Object>(this.MainAssetName, this.manifestItem); OnAllTaskCompleteCallback?.Invoke(MainAssetName, instObj); } } break; } })); curDoTaskConter++; } }
/// <summary> /// 一个任务完成的回调 /// </summary> /// <param name="assetPath"></param> /// <param name="obj"></param> private void OnTaskComplete(LoaderTaskData task, Object obj) { if (isStop) { return; } //判断任务进度 if (!task.IsMainAsset) { this.DoNextTask(); } else { //总进度通知 IsComplete = true; OnAllTaskCompleteCallback?.Invoke(MainAssetName, obj); } }
/// <summary> /// 一个任务完成的回调 /// </summary> /// <param name="assetPath"></param> /// <param name="obj"></param> private void OnTaskComplete(string assetPath, Object obj) { if (isStop) { return; } //任务计数++ taskCompleteCounter++; //判断任务进度 if (taskCompleteCounter < totalTaskNum) { this.DoNextTask(); } else { IsComplete = true; //总进度通知 OnAllTaskCompleteCallback?.Invoke(MainAssetName, obj); } }