/// <summary>
        /// 异步加载接口
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="path"></param>
        /// <param name="callback"></param>
        /// <returns></returns>
        public int AsyncLoad <T>(string path, Action <T> callback) where T : UnityEngine.Object
        {
            List <LoaderTaskData> taskQueue = new List <LoaderTaskData>();
            //获取依赖
            var dependAssets = config.Manifest.GetDirectDependenciesByName(path);

            if (dependAssets == null)
            {
                return(-1);
            }
            //
            foreach (var r in dependAssets)
            {
                var task = new LoaderTaskData(r, typeof(Object));
                taskQueue.Add(task);
            }

            var mainAsset = dependAssets[dependAssets.Length - 1];

            //添加任务组
            LoaderTaskGroup taskGroup = new LoaderTaskGroup(mainAsset, 10, taskQueue, AsyncLoadAssetBundle,
                                                            (p, obj) => { callback(obj as T); });

            taskGroup.Id = this.taskIDCounter++;
            AddTaskGroup(taskGroup);

            //开始任务
            DoNextTask();
            return(taskGroup.Id);
        }
示例#2
0
        /// <summary>
        /// 异步加载接口
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="path"></param>
        /// <param name="callback"></param>
        /// <returns></returns>
        public int AsyncLoad <T>(string path, Action <T> callback) where T : UnityEngine.Object
        {
            Queue <LoaderTaskData> taskQueue = new Queue <LoaderTaskData>();

            //获取依赖
            path = GetExistPath(path);
            var res = manifest.Manifest.GetDirectDependencies(path);

            foreach (var r in res)
            {
                var task = new LoaderTaskData(r, typeof(Object));
                taskQueue.Enqueue(task);
            }

            //添加任务组
            LoaderTaskGroup taskGroup =
                new LoaderTaskGroup(5, taskQueue, AsyncLoadAssetBundle, (p, obj) => { callback(obj as T); });

            taskGroup.Id = this.taskIDCounter++;
            AddTaskGroup(taskGroup);

            //开始任务
            DoNextTask();
            return(taskGroup.Id);
        }
        /// <summary>
        /// 异步加载 多个
        /// </summary>
        /// <param name="assetsPath">资源</param>
        /// <param name="onLoadComplete">加载结束</param>
        /// <param name="onLoadProcess">进度</param>
        /// <returns>taskid</returns>
        public List <int> AsyncLoad(IList <string> assetsPath, Action <IDictionary <string, Object> > onLoadComplete,
                                    Action <int, int> onLoadProcess)
        {
            List <int> idList = new List <int>();
            IDictionary <string, Object> retMap = new Dictionary <string, Object>();

            assetsPath = assetsPath.Distinct().ToList(); //去重
            int total = assetsPath.Count;
            //source
            int counter = 0;

            foreach (var asset in assetsPath)
            {
                var _asset = asset;
                List <LoaderTaskData> taskQueue = new List <LoaderTaskData>();
                var dependAssets = config.Manifest.GetDirectDependenciesByName(asset);
                //获取依赖
                if (dependAssets == null)
                {
                    total--;
                    continue;
                }

                foreach (var r in dependAssets)
                {
                    var task = new LoaderTaskData(r, typeof(Object));
                    taskQueue.Add(task);
                }

                var mainAsset = dependAssets[dependAssets.Length - 1];
                //添加任务组
                //加载颗粒度10个
                LoaderTaskGroup taskGroup = new LoaderTaskGroup(mainAsset, 10, taskQueue, AsyncLoadAssetBundle,
                                                                (p, obj) =>
                {
                    counter++;
                    //注意返回加载的id,不是具体地址的id
                    retMap[_asset] = obj;
                    if (onLoadProcess != null)
                    {
                        onLoadProcess(counter, total);
                    }

                    //完成
                    if (retMap.Count == total)
                    {
                        onLoadComplete(retMap);
                    }
                });
                taskGroup.Id = this.taskIDCounter++;
                AddTaskGroup(taskGroup);
                idList.Add(taskGroup.Id);
            }

            //开始任务
            DoNextTask();
            //
            return(idList);
        }
示例#4
0
        /// <summary>
        /// 异步加载 多个
        /// </summary>
        /// <param name="assetsPath">资源</param>
        /// <param name="onLoadComplete">加载结束</param>
        /// <param name="onLoadProcess">进度</param>
        /// <returns>taskid</returns>
        public List <int> AsyncLoad(IList <string> assetsPath, Action <IDictionary <string, Object> > onLoadComplete,
                                    Action <int, int> onLoadProcess)
        {
            List <int> idList = new List <int>();
            IDictionary <string, Object> retMap = new Dictionary <string, Object>();

            assetsPath = assetsPath.Distinct().ToList(); //去重
            int total = assetsPath.Count;
            //source
            int counter = 0;

            foreach (var asset in assetsPath)
            {
                var _asset = asset;
                Queue <LoaderTaskData> taskQueue = new Queue <LoaderTaskData>();
                //获取依赖
                var path = GetExistPath(_asset);
                if (string.IsNullOrEmpty(path))
                {
                    Debug.LogError("不存在资源:" + _asset);
                    total--;
                    continue;
                }
                var res = manifest.Manifest.GetDirectDependencies(path);
                foreach (var r in res)
                {
                    var task = new LoaderTaskData(r, typeof(Object));
                    taskQueue.Enqueue(task);
                }

                //添加任务组
                //加载颗粒度10个

                LoaderTaskGroup taskGroup = new LoaderTaskGroup(10, taskQueue, AsyncLoadAssetBundle,
                                                                (p, obj) =>
                {
                    counter++;
                    //注意返回加载的id,不是具体地址的id
                    retMap[_asset] = obj;
                    if (onLoadProcess != null)
                    {
                        onLoadProcess(counter, total);
                    }
                    //完成
                    if (retMap.Count == total)
                    {
                        onLoadComplete(retMap);
                    }
                });
                taskGroup.Id = this.taskIDCounter++;
                AddTaskGroup(taskGroup);
                idList.Add(taskGroup.Id);
            }

            //开始任务
            DoNextTask();
            //
            return(idList);
        }
示例#5
0
        /// <summary>
        /// 核心功能,所有任务靠这个推进度
        /// 执行下个任务
        /// </summary>
        void DoNextTask()
        {
            if (this.allTaskGroupList.Count == 0)
            {
                return;
            }

            //当前任务组执行完毕,执行下一个
            if ((curDoTask == null || curDoTask.IsComplete) && this.allTaskGroupList.Count > 0)
            {
                curDoTask = this.allTaskGroupList[0];
                this.allTaskGroupList.RemoveAt(0);
                var item = config.Manifest.GetManifestItemByHash(curDoTask.MainAsset);
                BDebug.LogFormat(">>>>任务组|id:{0} 任务数:{1} - {2}", curDoTask.Id, curDoTask.TaskQueueNum, item.Name);
                //开始task
                curDoTask.DoNextTask();
                //注册完成回调
                curDoTask.onTaskCompleteCallback += (a, b) => { DoNextTask(); };
            }
        }
示例#6
0
        /// <summary>
        /// 核心功能,所有任务靠这个推进度
        /// 执行下个任务
        /// </summary>
        void DoNextTask()
        {
            if (this.allTaskGroupList.Count == 0)
            {
                return;
            }

            //当前任务组执行完毕,执行下一个
            if ((curDoTask == null || curDoTask.IsComplete) &&
                this.allTaskGroupList.Count > 0)
            {
                curDoTask = this.allTaskGroupList[0];
                this.allTaskGroupList.RemoveAt(0);
                BDebug.LogFormat(">>>>任务组|id:{1}  count:{0}  mainasset:{2}", curDoTask.TaskQueueNum, curDoTask.Id,
                                 curDoTask.MainAsset);
                //开始task
                curDoTask.DoNextTask();
                //注册完成回调
                curDoTask.onTaskCompleteCallback += (a, b) => { DoNextTask(); };
            }
        }
 /// <summary>
 /// 添加一个任务组
 /// </summary>
 /// <param name="taskGroup"></param>
 public void AddTaskGroup(LoaderTaskGroup taskGroup)
 {
     this.allTaskGroupList.Add(taskGroup);
 }