public static LoadAssetTask Create(string assetName, AssetCategory assetCategory, Type assetType, int priority, ResourceInfo resourceInfo, Dictionary <string, AssetCategory> dependencyAssetNames, LoadAssetCallbacks loadAssetCallbacks, object userData) { LoadAssetTask loadAssetTask = ReferencePool.Acquire <LoadAssetTask>(); loadAssetTask.Initialize(assetName, assetCategory, assetType, priority, resourceInfo, dependencyAssetNames, userData); loadAssetTask.m_LoadAssetCallbacks = loadAssetCallbacks; return(loadAssetTask); }
/// <summary> /// 开始处理加载资源任务。 /// </summary> /// <param name="task">要处理的加载资源任务。</param> /// <returns>开始处理任务的状态。</returns> public StartTaskStatus Start(LoadResourceTaskBase task) { if (task == null) { throw new Exception("Task is invalid."); } m_Task = task; m_Task.StartTime = DateTime.Now; ResourceInfo resourceInfo = m_Task.ResourceInfo; if (!resourceInfo.Ready) { m_Task.StartTime = default(DateTime); return(StartTaskStatus.HasToWait); } if (IsAssetLoading(m_Task.AssetName)) { m_Task.StartTime = default(DateTime); return(StartTaskStatus.HasToWait); } if (!m_Task.IsScene) { AssetObject assetObject = m_ResourceLoader.AssetPool(m_Task.AssetCategory).Spawn(m_Task.AssetName); if (assetObject != null) { OnAssetObjectReady(assetObject); return(StartTaskStatus.Done); } } foreach (var dependencyAssetItem in m_Task.GetDependencyAssetNames()) { if (!m_ResourceLoader.AssetPool(dependencyAssetItem.Value).CanSpawn(dependencyAssetItem.Key)) { m_Task.StartTime = default(DateTime); return(StartTaskStatus.HasToWait); } } string resourceName = resourceInfo.ResourceName.Name; if (IsResourceLoading(resourceName)) { m_Task.StartTime = default(DateTime); return(StartTaskStatus.HasToWait); } s_LoadingAssetNames.Add(m_Task.AssetName); ResourceObject resourceObject = m_ResourceLoader.ResourcePool.Spawn(resourceName); if (resourceObject != null) { OnResourceObjectReady(resourceObject); return(StartTaskStatus.CanResume); } s_LoadingResourceNames.Add(resourceName); string fullPath = null; if (!s_CachedResourceNames.TryGetValue(resourceName, out fullPath)) { fullPath = Utility.Path.GetRegularPath(Path.Combine(resourceInfo.StorageInReadOnly ? m_ReadOnlyPath : m_ReadWritePath, resourceInfo.UseFileSystem ? resourceInfo.FileSystemName : resourceInfo.ResourceName.FullName)); s_CachedResourceNames.Add(resourceName, fullPath); } if (resourceInfo.LoadType == LoadType.LoadFromFile) { if (resourceInfo.UseFileSystem) { IFileSystem fileSystem = m_ResourceLoader.ResourceManager.GetFileSystem(resourceInfo.FileSystemName, resourceInfo.StorageInReadOnly); m_Helper.ReadFile(fileSystem, resourceInfo.ResourceName.FullName); } else { m_Helper.ReadFile(fullPath); } } else if (resourceInfo.LoadType == LoadType.LoadFromMemory || resourceInfo.LoadType == LoadType.LoadFromMemoryAndQuickDecrypt || resourceInfo.LoadType == LoadType.LoadFromMemoryAndDecrypt) { if (resourceInfo.UseFileSystem) { IFileSystem fileSystem = m_ResourceLoader.ResourceManager.GetFileSystem(resourceInfo.FileSystemName, resourceInfo.StorageInReadOnly); m_Helper.ReadBytes(fileSystem, resourceInfo.ResourceName.FullName); } else { m_Helper.ReadBytes(fullPath); } } else { throw new Exception(Utility.Text.Format("Resource load type '{0}' is not supported.", resourceInfo.LoadType.ToString())); } return(StartTaskStatus.CanResume); }