Exemple #1
0
        /// <summary>
        /// 异步加载 多个
        /// </summary>
        /// <param name="sources">资源</param>
        /// <param name="onLoadComplete">加载结束</param>
        /// <param name="onLoadProcess">进度</param>
        /// <returns>taskid</returns>
        public List <int> AsyncLoad(IList <string> sources,
                                    Action <IDictionary <string, UnityEngine.Object> > onLoadComplete, Action <int, int> onLoadProcess)
        {
            List <int>          idList = new List <int>();
            List <LoadTaskData> tasks  = new List <LoadTaskData>();

            foreach (var s in sources)
            {
                var task = new LoadTaskData(this.taskIDCounter++, s, typeof(Object));
                tasks.Add(task);
                idList.Add(task.Id);
            }

            LoadTaskGroup taskGroup = new LoadTaskGroup(tasks, onLoadProcess, onLoadComplete);

            //添加任务组
            AddTaskGroup(taskGroup);
            //开始任务
            DoNextTask();
            //
            return(idList);
        }
Exemple #2
0
        /// <summary>
        /// 核心功能,所有任务靠这个推进度
        /// 执行下个任务
        /// </summary>
        void DoNextTask()
        {
            if (isDoing)
            {
                return;
            }

            //没有东西的时候 跳出
            if (currentTaskGroup == null && this.allTaskList.Count == 0)
            {
                BDebug.Log("---------无任务组,退出----------");
                return;
            }
            else if (currentTaskGroup == null && this.allTaskList.Count > 0)
            {
                currentTaskGroup = this.allTaskList[0];
                BDebug.Log("---------开始执行任务组----------  |" + currentTaskGroup.GetHashCode());
                foreach (var t in currentTaskGroup.TaskIdList)
                {
                    BDebug.Log("--->" + t.ResourcePath);
                }
            }

            LoadTaskData taskData = null;

            //获取一个任务
            while (true)
            {
                taskData = currentTaskGroup.GetTask();

                //任务不存在当前可执行列表中
                if (taskData != null && !willDoTaskSet.Contains(taskData.Id))
                {
                    currentTaskGroup.RemoveTask(taskData.Id);
                    continue;
                }
                //task为空,或者任务可以执行,跳出
                if (taskData == null || willDoTaskSet.Contains(taskData.Id))
                {
                    break;
                }
            }


            //当前任务组已经全部完成
            if (taskData == null)
            {
                BDebug.Log("---------加载任务组已完成---------- |" + currentTaskGroup.GetHashCode());
                currentTaskGroup = null;
                this.allTaskList.RemoveAt(0);

                DoNextTask();
            }
            else
            {
                //
                BDebug.Log("执行任务组中task:" + taskData.Id + " - " + taskData.ResourcePath);
                isDoing = true;
                //执行任务
                AsyncLoadAssetBundle(taskData.ResourcePath, b =>
                {
                    //移除任务
                    this.willDoTaskSet.Remove(taskData.Id);
                    //

                    var path = GetAssetRealPath(taskData.ResourcePath);
                    var obj  = LoadFormAssetBundle(path, taskData.LoadType);
                    //任务完成
                    currentTaskGroup.OnOneTaskComplete(taskData.Id, taskData.ResourcePath, obj);
                    isDoing = false;
                    //继续执行
                    DoNextTask();
                });
            }
        }