/// <summary> /// 真正的请求资源 /// </summary> /// <param name="respath">资源AB路径</param> /// <param name="completehandler">加载完成上层回调</param> /// <param name="loadtype">资源加载类型</param> /// <param name="loadmethod">资源加载方式</param> protected override void realRequestResource(string respath, LoadResourceCompleteHandler completehandler, ResourceLoadType loadtype = ResourceLoadType.NormalLoad, ResourceLoadMethod loadmethod = ResourceLoadMethod.Sync) { // 如果资源已经加载完成,直接返回 if (mAllLoadedResourceInfoMap[ResourceLoadType.NormalLoad].ContainsKey(respath)) { completehandler(mAllLoadedResourceInfoMap[ResourceLoadType.NormalLoad][respath]); if (loadtype > ResourceLoadType.NormalLoad) { updateLoadedResourceInfoLoadType(respath, ResourceLoadType.NormalLoad, loadtype); } } else if (mAllLoadedResourceInfoMap[ResourceLoadType.Preload].ContainsKey(respath)) { completehandler(mAllLoadedResourceInfoMap[ResourceLoadType.Preload][respath]); if (loadtype > ResourceLoadType.Preload) { updateLoadedResourceInfoLoadType(respath, ResourceLoadType.Preload, loadtype); } } else if (mAllLoadedResourceInfoMap[ResourceLoadType.PermanentLoad].ContainsKey(respath)) { completehandler(mAllLoadedResourceInfoMap[ResourceLoadType.PermanentLoad][respath]); } else { AssetDatabaseLoader adloader = createADLoader(respath); //暂时默认都当同步加载,不支持异步模拟 adloader.LoadMethod = loadmethod; adloader.LoadType = loadtype; adloader.LoadResourceCompleteCallBack = completehandler; adloader.LoadSelfResourceCompleteNotifier = onResourceLoadCompleteNotifier; mResourceRequestTaskMap.Add(respath, adloader); adloader.startLoad(); } }
/// <summary> 资源加载完成通知(用于更新资源加载管理) /// </summary> /// <param name="adl">资源加载任务信息</param> private void onResourceLoadCompleteNotifier(AssetDatabaseLoader adl) { var abname = adl.AssetBundlePath; if (mResourceRequestTaskMap.ContainsKey(abname)) { mResourceRequestTaskMap.Remove(abname); mAllLoadedResourceInfoMap[adl.LoadType].Add(abname, adl.ResourceInfo); //资源加载数据统计 if (ResourceLoadAnalyse.Singleton.ResourceLoadAnalyseSwitch) { ResourceLoadAnalyse.Singleton.addResourceLoadedTime(abname); } } else { ResourceLogger.logErr(string.Format("收到不在加载任务请求队列里的AB:{0}加载完成回调!", abname)); } }