/// <summary> /// 核心功能,所有任务靠这个推进度 /// 执行下个任务 /// </summary> IEnumerator IE_AsyncTaskListUpdte() { while (true) { if (this.asyncTaskGroupQueue.Count > 0) { //开始新任务 AsyncLoadTaskGroupResult task = null; do { task = this.asyncTaskGroupQueue.Dequeue(); } while (task.IsCancel && this.asyncTaskGroupQueue.Count > 0); //执行任务 if (!task.IsCancel) { BDebug.Log("【AssetbundleV2】开始执行异步加载:" + task.AssetBundleItem.LoadPath); yield return(task); if (task.IsSuccess) { BDebug.Log("【AssetbundleV2】加载完成:" + task.AssetBundleItem.LoadPath); task.Dispose(); } } } // BDebug.Log("【Assetbundlev2】检测 剩余任务:" + this.asyncTaskGroupList.Count + " " + curDoTask.MainAssetName); yield return(null); } }
/// <summary> /// 异步加载接口 /// 外部创建 需要自己管理yield,防止逻辑冲突 /// 开放该接口,主要用于各种批量测试控制逻辑,一般情况下无需调用 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="assetName"></param> /// <param name="callback"></param> /// <returns>异步任务id</returns> public AsyncLoadTaskGroupResult CreateAsyncLoadTask <T>(string assetName) where T : UnityEngine.Object { var assetBundleItem = AssetConfigLoder.GetAssetBundleData <T>(assetName); if (assetBundleItem != null) { //添加任务组 var taskGroup = new AsyncLoadTaskGroupResult(this, assetBundleItem); taskGroup.Id = this.taskIdxCounter++; // AddAsyncTaskGroup(taskGroup); return(taskGroup); } else { BDebug.LogError("不存在资源:" + assetName); } return(null); }
/// <summary> /// 添加一个任务组 /// </summary> /// <param name="taskGroupResult"></param> public void AddAsyncTaskGroup(AsyncLoadTaskGroupResult taskGroupResult) { this.asyncTaskGroupQueue.Enqueue(taskGroupResult); }