mirror of
https://github.com/tuyoogame/YooAsset.git
synced 2026-05-28 19:48:47 +00:00
refactor : 重构代码
This commit is contained in:
@@ -10,17 +10,22 @@ namespace YooAsset
|
|||||||
{
|
{
|
||||||
private List<AsyncOperationBase> _childs;
|
private List<AsyncOperationBase> _childs;
|
||||||
private Action<AsyncOperationBase> _callback;
|
private Action<AsyncOperationBase> _callback;
|
||||||
private uint _priority = 0;
|
private uint _priority;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 等待异步执行完成
|
/// 等待异步执行完成
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal bool IsWaitForAsyncComplete { private set; get; } = false;
|
internal bool IsWaitForAsyncComplete { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 标记脏(用于调度器检测并重排)
|
||||||
|
/// </summary>
|
||||||
|
internal bool IsDirty { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否已经完成
|
/// 是否已经完成
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal bool IsFinish { private set; get; } = false;
|
internal bool IsFinish { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 异步系统是否繁忙
|
/// 异步系统是否繁忙
|
||||||
@@ -35,11 +40,6 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 标记脏(用于调度器检测并重排)
|
|
||||||
/// </summary>
|
|
||||||
internal bool IsDirty { set; get; } = false;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 任务优先级
|
/// 任务优先级
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -98,6 +98,7 @@ namespace YooAsset
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
//注意:任务已完成,立即调用回调
|
||||||
value.Invoke(this);
|
value.Invoke(this);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -295,23 +296,27 @@ namespace YooAsset
|
|||||||
// 结束记录
|
// 结束记录
|
||||||
DebugEndRecording();
|
DebugEndRecording();
|
||||||
|
|
||||||
|
if (_callback != null)
|
||||||
|
{
|
||||||
|
var invocationList = _callback.GetInvocationList();
|
||||||
|
foreach (var handler in invocationList)
|
||||||
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
//TODO 单个回调异常会阻断后续订阅者
|
((Action<AsyncOperationBase>)handler).Invoke(this);
|
||||||
_callback?.Invoke(this);
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
YooLogger.Error($"Exception in completion callback: {ex}");
|
YooLogger.Error($"Exception in completion callback: {ex}");
|
||||||
}
|
}
|
||||||
finally
|
}
|
||||||
{
|
}
|
||||||
|
|
||||||
_callback = null;
|
_callback = null;
|
||||||
if (_taskCompletionSource != null)
|
if (_taskCompletionSource != null)
|
||||||
_taskCompletionSource.TrySetResult(null);
|
_taskCompletionSource.TrySetResult(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行一次更新逻辑
|
/// 执行一次更新逻辑
|
||||||
@@ -327,7 +332,10 @@ namespace YooAsset
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 批量执行一定次数的更新逻辑
|
/// 批量执行一定次数的更新逻辑
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="count">次数</param>
|
/// <param name="count">最大执行次数,默认1000次</param>
|
||||||
|
/// <remarks>
|
||||||
|
/// 用于需要快速完成但又不想完全阻塞主线程的场景。
|
||||||
|
/// </remarks>
|
||||||
protected void RunBatchExecution(int count = 1000)
|
protected void RunBatchExecution(int count = 1000)
|
||||||
{
|
{
|
||||||
if (IsDone)
|
if (IsDone)
|
||||||
@@ -374,7 +382,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void WaitForAsyncComplete()
|
public void WaitForAsyncComplete()
|
||||||
{
|
{
|
||||||
//TODO 防止异步操作被挂起陷入无限死循环!
|
//注意:防止异步操作被挂起陷入无限死循环!
|
||||||
if (Status == EOperationStatus.None)
|
if (Status == EOperationStatus.None)
|
||||||
{
|
{
|
||||||
StartOperation();
|
StartOperation();
|
||||||
@@ -400,15 +408,17 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
|
|
||||||
#region 调试信息
|
#region 调试信息
|
||||||
|
private const int MaxCycleCheckDepth = 4096; // 循环检测最大深度
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 开始的时间
|
/// 开始的时间
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string BeginTime { protected set; get; }
|
public string BeginTime { get; protected set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 处理耗时(单位:毫秒)
|
/// 处理耗时(单位:毫秒)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public long ProcessTime { protected set; get; }
|
public long ProcessTime { get; protected set; }
|
||||||
|
|
||||||
// 加载耗时统计
|
// 加载耗时统计
|
||||||
private Stopwatch _watch = null;
|
private Stopwatch _watch = null;
|
||||||
@@ -449,9 +459,13 @@ namespace YooAsset
|
|||||||
double s = System.Math.Floor(spawnTime - m * 60 - h * 3600);
|
double s = System.Math.Floor(spawnTime - m * 60 - h * 3600);
|
||||||
return h.ToString("00") + ":" + m.ToString("00") + ":" + s.ToString("00");
|
return h.ToString("00") + ":" + m.ToString("00") + ":" + s.ToString("00");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 检测添加子任务是否会形成循环依赖
|
||||||
|
/// 使用深度优先搜索(DFS)遍历子任务图
|
||||||
|
/// </summary>
|
||||||
private bool WouldCreateCycle(AsyncOperationBase child)
|
private bool WouldCreateCycle(AsyncOperationBase child)
|
||||||
{
|
{
|
||||||
const int maxVisited = 4096;
|
|
||||||
var stack = new Stack<AsyncOperationBase>();
|
var stack = new Stack<AsyncOperationBase>();
|
||||||
var visited = new HashSet<AsyncOperationBase>();
|
var visited = new HashSet<AsyncOperationBase>();
|
||||||
stack.Push(child);
|
stack.Push(child);
|
||||||
@@ -462,18 +476,22 @@ namespace YooAsset
|
|||||||
if (node == null)
|
if (node == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// 防止重复访问
|
||||||
if (visited.Add(node) == false)
|
if (visited.Add(node) == false)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (visited.Count > maxVisited)
|
// 防止无限循环(图过大)
|
||||||
|
if (visited.Count > MaxCycleCheckDepth)
|
||||||
throw new YooInternalException("Child operation graph is too large, cycle check aborted !");
|
throw new YooInternalException("Child operation graph is too large, cycle check aborted !");
|
||||||
|
|
||||||
|
// 检测循环:如果遍历到自己,说明形成循环
|
||||||
if (ReferenceEquals(node, this))
|
if (ReferenceEquals(node, this))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (node._childs == null)
|
if (node._childs == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// 将子节点加入栈
|
||||||
for (int i = 0; i < node._childs.Count; i++)
|
for (int i = 0; i < node._childs.Count; i++)
|
||||||
{
|
{
|
||||||
stack.Push(node._childs[i]);
|
stack.Push(node._childs[i]);
|
||||||
|
|||||||
@@ -10,12 +10,12 @@ namespace YooAsset
|
|||||||
{
|
{
|
||||||
private readonly List<AsyncOperationBase> _operations = new List<AsyncOperationBase>(100);
|
private readonly List<AsyncOperationBase> _operations = new List<AsyncOperationBase>(100);
|
||||||
private readonly List<AsyncOperationBase> _newList = new List<AsyncOperationBase>(100);
|
private readonly List<AsyncOperationBase> _newList = new List<AsyncOperationBase>(100);
|
||||||
private uint _priority = 0;
|
private uint _priority;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 所属包裹名称
|
/// 所属包裹名称
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string PackageName { private set; get; }
|
public string PackageName { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 调度器优先级(值越大越优先)
|
/// 调度器优先级(值越大越优先)
|
||||||
@@ -36,12 +36,12 @@ namespace YooAsset
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 优先级是否已变更(需要重新排序)
|
/// 优先级是否已变更(需要重新排序)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsDirty { set; get; } = false;
|
public bool IsDirty { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 创建顺序(用于同优先级稳定排序)
|
/// 创建顺序(用于同优先级稳定排序)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int CreateIndex { private set; get; }
|
public int CreateIndex { get; private set; }
|
||||||
|
|
||||||
|
|
||||||
public OperationScheduler(string packageName, int createIndex)
|
public OperationScheduler(string packageName, int createIndex)
|
||||||
@@ -53,6 +53,9 @@ namespace YooAsset
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 开始处理异步操作
|
/// 开始处理异步操作
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// 操作会先添加到临时队列,在下一次Update时才会开始执行
|
||||||
|
/// </remarks>
|
||||||
public void StartOperation(AsyncOperationBase operation)
|
public void StartOperation(AsyncOperationBase operation)
|
||||||
{
|
{
|
||||||
_newList.Add(operation);
|
_newList.Add(operation);
|
||||||
|
|||||||
@@ -15,13 +15,13 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// 全局调度器名称
|
public const string GlobalSchedulerName = "YOOASSET_GLOBAL_SCHEDULER"; // 全局调度器名称
|
||||||
public const string GLOBAL_SCHEDULER_NAME = "YOOASSET_GLOBAL_SCHEDULER";
|
private const long MinTimeSlice = 10; // 最小时间片(毫秒)
|
||||||
|
|
||||||
private static readonly Dictionary<string, OperationScheduler> _schedulerDic = new Dictionary<string, OperationScheduler>(100);
|
private static readonly Dictionary<string, OperationScheduler> _schedulerDic = new Dictionary<string, OperationScheduler>(100);
|
||||||
private static readonly List<OperationScheduler> _schedulerList = new List<OperationScheduler>(100);
|
private static readonly List<OperationScheduler> _schedulerList = new List<OperationScheduler>(100);
|
||||||
private static bool _isInitialize = false;
|
private static bool _isInitialized;
|
||||||
private static int _createIndex = 0;
|
private static int _createIndex;
|
||||||
|
|
||||||
// 计时器相关
|
// 计时器相关
|
||||||
private static Stopwatch _watch;
|
private static Stopwatch _watch;
|
||||||
@@ -33,12 +33,16 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static long MaxTimeSlice
|
public static long MaxTimeSlice
|
||||||
{
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _maxTimeSlice;
|
||||||
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (value < 10)
|
if (value < MinTimeSlice)
|
||||||
{
|
{
|
||||||
_maxTimeSlice = 10;
|
_maxTimeSlice = MinTimeSlice;
|
||||||
YooLogger.Warning($"MaxTimeSlice minimum value is 10 milliseconds.");
|
YooLogger.Warning($"MaxTimeSlice minimum value is {MinTimeSlice} milliseconds.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -71,14 +75,17 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static void Initialize()
|
public static void Initialize()
|
||||||
{
|
{
|
||||||
if (_isInitialize == false)
|
if (_isInitialized)
|
||||||
{
|
{
|
||||||
_isInitialize = true;
|
YooLogger.Warning("Operation system is already initialized!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_isInitialized = true;
|
||||||
_watch = Stopwatch.StartNew();
|
_watch = Stopwatch.StartNew();
|
||||||
|
|
||||||
// 创建全局调度器
|
// 创建全局调度器
|
||||||
CreatePackageScheduler(GLOBAL_SCHEDULER_NAME, uint.MaxValue);
|
CreatePackageScheduler(GlobalSchedulerName, uint.MaxValue);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -86,7 +93,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static void Update()
|
public static void Update()
|
||||||
{
|
{
|
||||||
if (_isInitialize == false)
|
if (_isInitialized == false)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// 检测是否需要执行排序
|
// 检测是否需要执行排序
|
||||||
@@ -122,8 +129,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static void DestroyAll()
|
public static void DestroyAll()
|
||||||
{
|
{
|
||||||
_isInitialize = false;
|
_isInitialized = false;
|
||||||
YooLogger.Log("Operation system destroy all !");
|
|
||||||
|
|
||||||
// 清空所有调度器
|
// 清空所有调度器
|
||||||
foreach (var scheduler in _schedulerList)
|
foreach (var scheduler in _schedulerList)
|
||||||
@@ -136,7 +142,7 @@ namespace YooAsset
|
|||||||
|
|
||||||
_watch = null;
|
_watch = null;
|
||||||
_frameTime = 0;
|
_frameTime = 0;
|
||||||
MaxTimeSlice = long.MaxValue;
|
_maxTimeSlice = long.MaxValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -144,7 +150,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static OperationScheduler CreatePackageScheduler(string packageName, uint priority)
|
public static OperationScheduler CreatePackageScheduler(string packageName, uint priority)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize(packageName);
|
DebugEnsureInitialized(packageName);
|
||||||
|
|
||||||
if (_schedulerDic.ContainsKey(packageName))
|
if (_schedulerDic.ContainsKey(packageName))
|
||||||
{
|
{
|
||||||
@@ -163,10 +169,10 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static void DestroyPackageScheduler(string packageName)
|
public static void DestroyPackageScheduler(string packageName)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize(packageName);
|
DebugEnsureInitialized(packageName);
|
||||||
|
|
||||||
// 不允许销毁默认调度器
|
// 不允许销毁默认调度器
|
||||||
if (packageName == GLOBAL_SCHEDULER_NAME)
|
if (packageName == GlobalSchedulerName)
|
||||||
{
|
{
|
||||||
throw new YooInternalException("Cannot destroy the global package scheduler!");
|
throw new YooInternalException("Cannot destroy the global package scheduler!");
|
||||||
}
|
}
|
||||||
@@ -184,7 +190,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static void ClearPackageOperation(string packageName)
|
public static void ClearPackageOperation(string packageName)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize(packageName);
|
DebugEnsureInitialized(packageName);
|
||||||
|
|
||||||
var scheduler = GetScheduler(packageName);
|
var scheduler = GetScheduler(packageName);
|
||||||
scheduler.ClearAll();
|
scheduler.ClearAll();
|
||||||
@@ -195,7 +201,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static void StartOperation(string packageName, AsyncOperationBase operation)
|
public static void StartOperation(string packageName, AsyncOperationBase operation)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize(packageName);
|
DebugEnsureInitialized(packageName);
|
||||||
|
|
||||||
var scheduler = GetScheduler(packageName);
|
var scheduler = GetScheduler(packageName);
|
||||||
scheduler.StartOperation(operation);
|
scheduler.StartOperation(operation);
|
||||||
@@ -206,7 +212,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static void SetSchedulerPriority(string packageName, uint priority)
|
public static void SetSchedulerPriority(string packageName, uint priority)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize(packageName);
|
DebugEnsureInitialized(packageName);
|
||||||
|
|
||||||
var scheduler = GetScheduler(packageName);
|
var scheduler = GetScheduler(packageName);
|
||||||
scheduler.Priority = priority;
|
scheduler.Priority = priority;
|
||||||
@@ -217,7 +223,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static uint GetSchedulerPriority(string packageName)
|
public static uint GetSchedulerPriority(string packageName)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize(packageName);
|
DebugEnsureInitialized(packageName);
|
||||||
|
|
||||||
var scheduler = GetScheduler(packageName);
|
var scheduler = GetScheduler(packageName);
|
||||||
return scheduler.Priority;
|
return scheduler.Priority;
|
||||||
@@ -240,7 +246,7 @@ namespace YooAsset
|
|||||||
#region 调试信息
|
#region 调试信息
|
||||||
internal static List<DebugOperationInfo> GetDebugOperationInfos(string packageName)
|
internal static List<DebugOperationInfo> GetDebugOperationInfos(string packageName)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize(packageName);
|
DebugEnsureInitialized(packageName);
|
||||||
|
|
||||||
var scheduler = GetScheduler(packageName);
|
var scheduler = GetScheduler(packageName);
|
||||||
return scheduler.GetDebugOperationInfos();
|
return scheduler.GetDebugOperationInfos();
|
||||||
@@ -249,12 +255,12 @@ namespace YooAsset
|
|||||||
|
|
||||||
#region 调试方法
|
#region 调试方法
|
||||||
[Conditional("DEBUG")]
|
[Conditional("DEBUG")]
|
||||||
private static void DebugCheckInitialize(string packageName)
|
private static void DebugEnsureInitialized(string packageName)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(packageName))
|
if (string.IsNullOrWhiteSpace(packageName))
|
||||||
throw new YooInternalException("Package name is null or empty.");
|
throw new YooInternalException("Package name is null or empty.");
|
||||||
|
|
||||||
if (_isInitialize == false)
|
if (_isInitialized == false)
|
||||||
throw new YooInternalException($"{nameof(OperationSystem)} not initialized !");
|
throw new YooInternalException($"{nameof(OperationSystem)} not initialized !");
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ namespace YooAsset
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 当前激活的清单
|
/// 当前激活的清单
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public PackageManifest ActiveManifest { private set; get; }
|
public PackageManifest ActiveManifest { get; private set; }
|
||||||
|
|
||||||
|
|
||||||
public FileSystemHost(string packageName)
|
public FileSystemHost(string packageName)
|
||||||
@@ -75,8 +75,10 @@ namespace YooAsset
|
|||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取主文件系统
|
/// 获取主文件系统
|
||||||
/// 说明:文件系统列表里,最后一个属于主文件系统
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// 文件系统列表里,最后一个属于主文件系统
|
||||||
|
/// </remarks>
|
||||||
public IFileSystem GetMainFileSystem()
|
public IFileSystem GetMainFileSystem()
|
||||||
{
|
{
|
||||||
int count = FileSystems.Count;
|
int count = FileSystems.Count;
|
||||||
@@ -123,7 +125,7 @@ namespace YooAsset
|
|||||||
if (assetInfo == null || assetInfo.IsInvalid)
|
if (assetInfo == null || assetInfo.IsInvalid)
|
||||||
throw new YooInternalException();
|
throw new YooInternalException();
|
||||||
|
|
||||||
// 注意:如果清单里未找到资源包会抛出异常!
|
// 注意:如果清单里未找到资源包会抛出异常
|
||||||
var packageBundle = ActiveManifest.GetMainPackageBundle(assetInfo.Asset);
|
var packageBundle = ActiveManifest.GetMainPackageBundle(assetInfo.Asset);
|
||||||
return CreateBundleInfo(packageBundle);
|
return CreateBundleInfo(packageBundle);
|
||||||
}
|
}
|
||||||
@@ -161,6 +163,8 @@ namespace YooAsset
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 下载器相关
|
#region 下载器相关
|
||||||
|
private const int DefaultBundleInfoCapacity = 1000;
|
||||||
|
|
||||||
public bool IsNeedDownloadFromRemoteInternal(AssetInfo assetInfo)
|
public bool IsNeedDownloadFromRemoteInternal(AssetInfo assetInfo)
|
||||||
{
|
{
|
||||||
if (assetInfo.IsInvalid)
|
if (assetInfo.IsInvalid)
|
||||||
@@ -183,6 +187,20 @@ namespace YooAsset
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private delegate bool NeedPredicate(IFileSystem fileSystem, PackageBundle bundle);
|
||||||
|
private bool NeedDownload(IFileSystem fileSystem, PackageBundle bundle)
|
||||||
|
{
|
||||||
|
return fileSystem.NeedDownload(bundle);
|
||||||
|
}
|
||||||
|
private bool NeedUnpack(IFileSystem fileSystem, PackageBundle bundle)
|
||||||
|
{
|
||||||
|
return fileSystem.NeedUnpack(bundle);
|
||||||
|
}
|
||||||
|
private bool NeedImport(IFileSystem fileSystem, PackageBundle bundle)
|
||||||
|
{
|
||||||
|
return fileSystem.NeedImport(bundle);
|
||||||
|
}
|
||||||
|
|
||||||
public ResourceDownloaderOperation CreateResourceDownloader(ResourceDownloaderOptions options)
|
public ResourceDownloaderOperation CreateResourceDownloader(ResourceDownloaderOptions options)
|
||||||
{
|
{
|
||||||
return CreateResourceDownloader(ActiveManifest, options);
|
return CreateResourceDownloader(ActiveManifest, options);
|
||||||
@@ -191,9 +209,9 @@ namespace YooAsset
|
|||||||
{
|
{
|
||||||
List<BundleInfo> downloadList;
|
List<BundleInfo> downloadList;
|
||||||
if (options.Tags == null)
|
if (options.Tags == null)
|
||||||
downloadList = GetDownloadListByAll(manifest);
|
downloadList = GetBundleListByAll(manifest, NeedDownload);
|
||||||
else
|
else
|
||||||
downloadList = GetDownloadListByTags(manifest, options.Tags);
|
downloadList = GetBundleListByTags(manifest, options.Tags, NeedDownload);
|
||||||
|
|
||||||
var operation = new ResourceDownloaderOperation(PackageName, downloadList, options.MaximumConcurrency, options.FailedTryAgain);
|
var operation = new ResourceDownloaderOperation(PackageName, downloadList, options.MaximumConcurrency, options.FailedTryAgain);
|
||||||
return operation;
|
return operation;
|
||||||
@@ -207,9 +225,9 @@ namespace YooAsset
|
|||||||
{
|
{
|
||||||
List<BundleInfo> downloadList;
|
List<BundleInfo> downloadList;
|
||||||
if (options.AssetInfos == null)
|
if (options.AssetInfos == null)
|
||||||
downloadList = GetDownloadListByAll(manifest);
|
downloadList = GetBundleListByAll(manifest, NeedDownload);
|
||||||
else
|
else
|
||||||
downloadList = GetDownloadListByAssetInfos(manifest, options.AssetInfos, options.DownloadBundleDependencies);
|
downloadList = GetBundleListByAssetInfos(manifest, options.AssetInfos, options.DownloadBundleDependencies, NeedDownload);
|
||||||
|
|
||||||
var operation = new ResourceDownloaderOperation(PackageName, downloadList, options.MaximumConcurrency, options.FailedTryAgain);
|
var operation = new ResourceDownloaderOperation(PackageName, downloadList, options.MaximumConcurrency, options.FailedTryAgain);
|
||||||
return operation;
|
return operation;
|
||||||
@@ -221,13 +239,13 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
public ResourceUnpackerOperation CreateResourceUnpacker(PackageManifest manifest, ResourceUnpackerOptions options)
|
public ResourceUnpackerOperation CreateResourceUnpacker(PackageManifest manifest, ResourceUnpackerOptions options)
|
||||||
{
|
{
|
||||||
List<BundleInfo> unpcakList;
|
List<BundleInfo> unpackList;
|
||||||
if (options.Tags == null)
|
if (options.Tags == null)
|
||||||
unpcakList = GetUnpackListByAll(manifest);
|
unpackList = GetBundleListByAll(manifest, NeedUnpack);
|
||||||
else
|
else
|
||||||
unpcakList = GetUnpackListByTags(manifest, options.Tags);
|
unpackList = GetBundleListByTags(manifest, options.Tags, NeedUnpack);
|
||||||
|
|
||||||
var operation = new ResourceUnpackerOperation(PackageName, unpcakList, options.MaximumConcurrency, options.FailedTryAgain);
|
var operation = new ResourceUnpackerOperation(PackageName, unpackList, options.MaximumConcurrency, options.FailedTryAgain);
|
||||||
return operation;
|
return operation;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -237,24 +255,24 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
public ResourceImporterOperation CreateResourceImporter(PackageManifest manifest, BundleImporterOptions options)
|
public ResourceImporterOperation CreateResourceImporter(PackageManifest manifest, BundleImporterOptions options)
|
||||||
{
|
{
|
||||||
List<BundleInfo> importerList = GetImporterListByBundleInfos(manifest, options.BundleInfos);
|
List<BundleInfo> importerList = GetBundleListByBundleInfos(manifest, options.BundleInfos, NeedImport);
|
||||||
var operation = new ResourceImporterOperation(PackageName, importerList, options.MaximumConcurrency, options.FailedTryAgain);
|
var operation = new ResourceImporterOperation(PackageName, importerList, options.MaximumConcurrency, options.FailedTryAgain);
|
||||||
return operation;
|
return operation;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<BundleInfo> GetDownloadListByAll(PackageManifest manifest)
|
private List<BundleInfo> GetBundleListByAll(PackageManifest manifest, Func<IFileSystem, PackageBundle, bool> predicate)
|
||||||
{
|
{
|
||||||
if (manifest == null)
|
if (manifest == null)
|
||||||
return new List<BundleInfo>();
|
return new List<BundleInfo>();
|
||||||
|
|
||||||
List<BundleInfo> result = new List<BundleInfo>(1000);
|
List<BundleInfo> result = new List<BundleInfo>(DefaultBundleInfoCapacity);
|
||||||
foreach (var packageBundle in manifest.BundleList)
|
foreach (var packageBundle in manifest.BundleList)
|
||||||
{
|
{
|
||||||
var fileSystem = GetBelongFileSystem(packageBundle);
|
var fileSystem = GetBelongFileSystem(packageBundle);
|
||||||
if (fileSystem == null)
|
if (fileSystem == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (fileSystem.NeedDownload(packageBundle))
|
if (predicate(fileSystem, packageBundle))
|
||||||
{
|
{
|
||||||
var bundleInfo = new BundleInfo(fileSystem, packageBundle);
|
var bundleInfo = new BundleInfo(fileSystem, packageBundle);
|
||||||
result.Add(bundleInfo);
|
result.Add(bundleInfo);
|
||||||
@@ -262,21 +280,21 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
private List<BundleInfo> GetDownloadListByTags(PackageManifest manifest, string[] tags)
|
private List<BundleInfo> GetBundleListByTags(PackageManifest manifest, string[] tags, Func<IFileSystem, PackageBundle, bool> predicate)
|
||||||
{
|
{
|
||||||
if (manifest == null)
|
if (manifest == null)
|
||||||
return new List<BundleInfo>();
|
return new List<BundleInfo>();
|
||||||
|
|
||||||
List<BundleInfo> result = new List<BundleInfo>(1000);
|
List<BundleInfo> result = new List<BundleInfo>(DefaultBundleInfoCapacity);
|
||||||
foreach (var packageBundle in manifest.BundleList)
|
foreach (var packageBundle in manifest.BundleList)
|
||||||
{
|
{
|
||||||
var fileSystem = GetBelongFileSystem(packageBundle);
|
var fileSystem = GetBelongFileSystem(packageBundle);
|
||||||
if (fileSystem == null)
|
if (fileSystem == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (fileSystem.NeedDownload(packageBundle))
|
if (predicate(fileSystem, packageBundle))
|
||||||
{
|
{
|
||||||
// 如果未带任何标记,则统一下载
|
// 注意:如果未带任何标记,则统一处理
|
||||||
if (packageBundle.HasAnyTags() == false)
|
if (packageBundle.HasAnyTags() == false)
|
||||||
{
|
{
|
||||||
var bundleInfo = new BundleInfo(fileSystem, packageBundle);
|
var bundleInfo = new BundleInfo(fileSystem, packageBundle);
|
||||||
@@ -284,7 +302,6 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 查询DLC资源
|
|
||||||
if (packageBundle.HasTag(tags))
|
if (packageBundle.HasTag(tags))
|
||||||
{
|
{
|
||||||
var bundleInfo = new BundleInfo(fileSystem, packageBundle);
|
var bundleInfo = new BundleInfo(fileSystem, packageBundle);
|
||||||
@@ -295,7 +312,7 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
private List<BundleInfo> GetDownloadListByAssetInfos(PackageManifest manifest, AssetInfo[] assetInfos, bool recursiveDownload)
|
private List<BundleInfo> GetBundleListByAssetInfos(PackageManifest manifest, AssetInfo[] assetInfos, bool recursiveDepend, Func<IFileSystem, PackageBundle, bool> predicate)
|
||||||
{
|
{
|
||||||
if (manifest == null)
|
if (manifest == null)
|
||||||
return new List<BundleInfo>();
|
return new List<BundleInfo>();
|
||||||
@@ -331,7 +348,7 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 下载主资源包内所有资源对象依赖的资源包
|
// 下载主资源包内所有资源对象依赖的资源包
|
||||||
if (recursiveDownload)
|
if (recursiveDepend)
|
||||||
{
|
{
|
||||||
foreach (var otherMainAsset in mainBundle.IncludeMainAssets)
|
foreach (var otherMainAsset in mainBundle.IncludeMainAssets)
|
||||||
{
|
{
|
||||||
@@ -355,14 +372,14 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<BundleInfo> result = new List<BundleInfo>(1000);
|
List<BundleInfo> result = new List<BundleInfo>(DefaultBundleInfoCapacity);
|
||||||
foreach (var packageBundle in checkList)
|
foreach (var packageBundle in checkList)
|
||||||
{
|
{
|
||||||
var fileSystem = GetBelongFileSystem(packageBundle);
|
var fileSystem = GetBelongFileSystem(packageBundle);
|
||||||
if (fileSystem == null)
|
if (fileSystem == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (fileSystem.NeedDownload(packageBundle))
|
if (predicate(fileSystem, packageBundle))
|
||||||
{
|
{
|
||||||
var bundleInfo = new BundleInfo(fileSystem, packageBundle);
|
var bundleInfo = new BundleInfo(fileSystem, packageBundle);
|
||||||
result.Add(bundleInfo);
|
result.Add(bundleInfo);
|
||||||
@@ -370,62 +387,19 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
private List<BundleInfo> GetUnpackListByAll(PackageManifest manifest)
|
private List<BundleInfo> GetBundleListByBundleInfos(PackageManifest manifest, ImportBundleInfo[] fileInfos, Func<IFileSystem, PackageBundle, bool> predicate)
|
||||||
{
|
{
|
||||||
if (manifest == null)
|
if (manifest == null)
|
||||||
return new List<BundleInfo>();
|
return new List<BundleInfo>();
|
||||||
|
|
||||||
List<BundleInfo> result = new List<BundleInfo>(1000);
|
List<BundleInfo> result = new List<BundleInfo>(DefaultBundleInfoCapacity);
|
||||||
foreach (var packageBundle in manifest.BundleList)
|
|
||||||
{
|
|
||||||
var fileSystem = GetBelongFileSystem(packageBundle);
|
|
||||||
if (fileSystem == null)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (fileSystem.NeedUnpack(packageBundle))
|
|
||||||
{
|
|
||||||
var bundleInfo = new BundleInfo(fileSystem, packageBundle);
|
|
||||||
result.Add(bundleInfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
private List<BundleInfo> GetUnpackListByTags(PackageManifest manifest, string[] tags)
|
|
||||||
{
|
|
||||||
if (manifest == null)
|
|
||||||
return new List<BundleInfo>();
|
|
||||||
|
|
||||||
List<BundleInfo> result = new List<BundleInfo>(1000);
|
|
||||||
foreach (var packageBundle in manifest.BundleList)
|
|
||||||
{
|
|
||||||
var fileSystem = GetBelongFileSystem(packageBundle);
|
|
||||||
if (fileSystem == null)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (fileSystem.NeedUnpack(packageBundle))
|
|
||||||
{
|
|
||||||
if (packageBundle.HasTag(tags))
|
|
||||||
{
|
|
||||||
var bundleInfo = new BundleInfo(fileSystem, packageBundle);
|
|
||||||
result.Add(bundleInfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
private List<BundleInfo> GetImporterListByBundleInfos(PackageManifest manifest, ImportBundleInfo[] fileInfos)
|
|
||||||
{
|
|
||||||
if (manifest == null)
|
|
||||||
return new List<BundleInfo>();
|
|
||||||
|
|
||||||
List<BundleInfo> result = new List<BundleInfo>();
|
|
||||||
foreach (var fileInfo in fileInfos)
|
foreach (var fileInfo in fileInfos)
|
||||||
{
|
{
|
||||||
string filePath = fileInfo.FilePath;
|
string filePath = fileInfo.FilePath;
|
||||||
if (string.IsNullOrEmpty(filePath))
|
if (string.IsNullOrEmpty(filePath))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
PackageBundle packageBundle = null;
|
PackageBundle packageBundle;
|
||||||
if (string.IsNullOrEmpty(fileInfo.BundleName) == false)
|
if (string.IsNullOrEmpty(fileInfo.BundleName) == false)
|
||||||
{
|
{
|
||||||
if (manifest.TryGetPackageBundleByBundleName(fileInfo.BundleName, out packageBundle) == false)
|
if (manifest.TryGetPackageBundleByBundleName(fileInfo.BundleName, out packageBundle) == false)
|
||||||
@@ -458,7 +432,7 @@ namespace YooAsset
|
|||||||
if (fileSystem == null)
|
if (fileSystem == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (fileSystem.NeedImport(packageBundle))
|
if (predicate(fileSystem, packageBundle))
|
||||||
{
|
{
|
||||||
var bundleInfo = new BundleInfo(fileSystem, packageBundle, filePath);
|
var bundleInfo = new BundleInfo(fileSystem, packageBundle, filePath);
|
||||||
result.Add(bundleInfo);
|
result.Add(bundleInfo);
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ namespace YooAsset
|
|||||||
else
|
else
|
||||||
throw new NotImplementedException($"{_options.GetType().Name}");
|
throw new NotImplementedException($"{_options.GetType().Name}");
|
||||||
|
|
||||||
_package._playMode = _playMode;
|
|
||||||
_steps = ESteps.CheckOptions;
|
_steps = ESteps.CheckOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,8 +121,7 @@ namespace YooAsset
|
|||||||
resourceManager.Initialize(_options, fileSystemHost);
|
resourceManager.Initialize(_options, fileSystemHost);
|
||||||
|
|
||||||
_fileSystemHost = fileSystemHost;
|
_fileSystemHost = fileSystemHost;
|
||||||
_package._fileSystemHost = fileSystemHost;
|
_package.InternalInitialize(resourceManager, fileSystemHost);
|
||||||
_package._resourceManager = resourceManager;
|
|
||||||
_steps = ESteps.InitFileSystem;
|
_steps = ESteps.InitFileSystem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,9 +9,8 @@ namespace YooAsset
|
|||||||
public class ResourcePackage
|
public class ResourcePackage
|
||||||
{
|
{
|
||||||
private InitializePackageOperation _initializeOp;
|
private InitializePackageOperation _initializeOp;
|
||||||
internal ResourceManager _resourceManager;
|
private ResourceManager _resourceManager;
|
||||||
internal FileSystemHost _fileSystemHost;
|
private FileSystemHost _fileSystemHost;
|
||||||
internal EPlayMode _playMode;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 包裹名
|
/// 包裹名
|
||||||
@@ -58,10 +57,11 @@ namespace YooAsset
|
|||||||
{
|
{
|
||||||
PackageName = packageName;
|
PackageName = packageName;
|
||||||
}
|
}
|
||||||
|
internal void InternalInitialize(ResourceManager manager, FileSystemHost host)
|
||||||
/// <summary>
|
{
|
||||||
/// 销毁资源包裹
|
_resourceManager = manager;
|
||||||
/// </summary>
|
_fileSystemHost = host;
|
||||||
|
}
|
||||||
internal void InternalDestroy()
|
internal void InternalDestroy()
|
||||||
{
|
{
|
||||||
_initializeOp = null;
|
_initializeOp = null;
|
||||||
@@ -91,7 +91,7 @@ namespace YooAsset
|
|||||||
|
|
||||||
// 检测重复初始化
|
// 检测重复初始化
|
||||||
if (_initializeOp != null)
|
if (_initializeOp != null)
|
||||||
throw new YooPackageException(PackageName, $"Package '{PackageName}' is already initialized !");
|
throw new YooPackageException(PackageName, $"Resource package '{PackageName}' is already initialized!");
|
||||||
|
|
||||||
// 开始初始化操作
|
// 开始初始化操作
|
||||||
_initializeOp = new InitializePackageOperation(this, options);
|
_initializeOp = new InitializePackageOperation(this, options);
|
||||||
@@ -113,7 +113,7 @@ namespace YooAsset
|
|||||||
{
|
{
|
||||||
var options = new UnloadAllAssetsOptions(true, true);
|
var options = new UnloadAllAssetsOptions(true, true);
|
||||||
var operation = new DestroyPackageOperation(this, options);
|
var operation = new DestroyPackageOperation(this, options);
|
||||||
OperationSystem.StartOperation(OperationSystem.GLOBAL_SCHEDULER_NAME, operation);
|
OperationSystem.StartOperation(OperationSystem.GlobalSchedulerName, operation);
|
||||||
return operation;
|
return operation;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,7 +123,8 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public RequestPackageVersionOperation RequestPackageVersionAsync()
|
public RequestPackageVersionOperation RequestPackageVersionAsync()
|
||||||
{
|
{
|
||||||
var options = new RequestPackageVersionOptions(true, 60);
|
int defaultTimeout = 60;
|
||||||
|
var options = new RequestPackageVersionOptions(true, defaultTimeout);
|
||||||
return RequestPackageVersionAsync(options);
|
return RequestPackageVersionAsync(options);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,7 +133,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public RequestPackageVersionOperation RequestPackageVersionAsync(RequestPackageVersionOptions options)
|
public RequestPackageVersionOperation RequestPackageVersionAsync(RequestPackageVersionOptions options)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize(false);
|
EnsureInitialized(false);
|
||||||
var operation = new RequestPackageVersionOperation(_fileSystemHost, options);
|
var operation = new RequestPackageVersionOperation(_fileSystemHost, options);
|
||||||
OperationSystem.StartOperation(PackageName, operation);
|
OperationSystem.StartOperation(PackageName, operation);
|
||||||
return operation;
|
return operation;
|
||||||
@@ -143,7 +144,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public LoadPackageManifestOperation LoadPackageManifestAsync(LoadPackageManifestOptions options)
|
public LoadPackageManifestOperation LoadPackageManifestAsync(LoadPackageManifestOptions options)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize(false);
|
EnsureInitialized(false);
|
||||||
|
|
||||||
// 注意:强烈建议在更新之前保持加载器为空!
|
// 注意:强烈建议在更新之前保持加载器为空!
|
||||||
if (_resourceManager.HasAnyLoader())
|
if (_resourceManager.HasAnyLoader())
|
||||||
@@ -161,7 +162,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public PreDownloadContentOperation PreDownloadContentAsync(PreDownloadContentOptions options)
|
public PreDownloadContentOperation PreDownloadContentAsync(PreDownloadContentOptions options)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize(false);
|
EnsureInitialized(false);
|
||||||
var operation = new PreDownloadContentOperation(_fileSystemHost, options);
|
var operation = new PreDownloadContentOperation(_fileSystemHost, options);
|
||||||
OperationSystem.StartOperation(PackageName, operation);
|
OperationSystem.StartOperation(PackageName, operation);
|
||||||
return operation;
|
return operation;
|
||||||
@@ -172,7 +173,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public ClearCacheFilesOperation ClearCacheFilesAsync(ClearCacheFilesOptions options)
|
public ClearCacheFilesOperation ClearCacheFilesAsync(ClearCacheFilesOptions options)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize(false);
|
EnsureInitialized(false);
|
||||||
options.Manifest = _fileSystemHost.ActiveManifest;
|
options.Manifest = _fileSystemHost.ActiveManifest;
|
||||||
var operation = new ClearCacheFilesOperation(_fileSystemHost, options);
|
var operation = new ClearCacheFilesOperation(_fileSystemHost, options);
|
||||||
OperationSystem.StartOperation(PackageName, operation);
|
OperationSystem.StartOperation(PackageName, operation);
|
||||||
@@ -186,7 +187,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string GetPackageVersion()
|
public string GetPackageVersion()
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return _fileSystemHost.ActiveManifest.PackageVersion;
|
return _fileSystemHost.ActiveManifest.PackageVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -195,7 +196,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string GetPackageNote()
|
public string GetPackageNote()
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return _fileSystemHost.ActiveManifest.PackageNote;
|
return _fileSystemHost.ActiveManifest.PackageNote;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,7 +205,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public PackageDetails GetPackageDetails()
|
public PackageDetails GetPackageDetails()
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return _fileSystemHost.ActiveManifest.GetPackageDetails();
|
return _fileSystemHost.ActiveManifest.GetPackageDetails();
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
@@ -225,7 +226,7 @@ namespace YooAsset
|
|||||||
/// <param name="options">卸载选项</param>
|
/// <param name="options">卸载选项</param>
|
||||||
public UnloadAllAssetsOperation UnloadAllAssetsAsync(UnloadAllAssetsOptions options)
|
public UnloadAllAssetsOperation UnloadAllAssetsAsync(UnloadAllAssetsOptions options)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
var operation = new UnloadAllAssetsOperation(_resourceManager, options);
|
var operation = new UnloadAllAssetsOperation(_resourceManager, options);
|
||||||
OperationSystem.StartOperation(PackageName, operation);
|
OperationSystem.StartOperation(PackageName, operation);
|
||||||
return operation;
|
return operation;
|
||||||
@@ -238,7 +239,8 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public UnloadUnusedAssetsOperation UnloadUnusedAssetsAsync()
|
public UnloadUnusedAssetsOperation UnloadUnusedAssetsAsync()
|
||||||
{
|
{
|
||||||
var options = new UnloadUnusedAssetsOptions(10);
|
int defaultLoopCount = 10;
|
||||||
|
var options = new UnloadUnusedAssetsOptions(defaultLoopCount);
|
||||||
return UnloadUnusedAssetsAsync(options);
|
return UnloadUnusedAssetsAsync(options);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -248,7 +250,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public UnloadUnusedAssetsOperation UnloadUnusedAssetsAsync(UnloadUnusedAssetsOptions options)
|
public UnloadUnusedAssetsOperation UnloadUnusedAssetsAsync(UnloadUnusedAssetsOptions options)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
var operation = new UnloadUnusedAssetsOperation(_resourceManager, options);
|
var operation = new UnloadUnusedAssetsOperation(_resourceManager, options);
|
||||||
OperationSystem.StartOperation(PackageName, operation);
|
OperationSystem.StartOperation(PackageName, operation);
|
||||||
return operation;
|
return operation;
|
||||||
@@ -260,7 +262,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void TryUnloadUnusedAsset(string location, int loopCount = 10)
|
public void TryUnloadUnusedAsset(string location, int loopCount = 10)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null);
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null);
|
||||||
_resourceManager.TryUnloadUnusedAsset(assetInfo, loopCount);
|
_resourceManager.TryUnloadUnusedAsset(assetInfo, loopCount);
|
||||||
}
|
}
|
||||||
@@ -271,7 +273,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void TryUnloadUnusedAsset(AssetInfo assetInfo, int loopCount = 10)
|
public void TryUnloadUnusedAsset(AssetInfo assetInfo, int loopCount = 10)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
_resourceManager.TryUnloadUnusedAsset(assetInfo, loopCount);
|
_resourceManager.TryUnloadUnusedAsset(assetInfo, loopCount);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
@@ -283,7 +285,7 @@ namespace YooAsset
|
|||||||
/// <param name="location">资源的定位地址</param>
|
/// <param name="location">资源的定位地址</param>
|
||||||
public bool IsNeedDownloadFromRemote(string location)
|
public bool IsNeedDownloadFromRemote(string location)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null);
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null);
|
||||||
return _fileSystemHost.IsNeedDownloadFromRemoteInternal(assetInfo);
|
return _fileSystemHost.IsNeedDownloadFromRemoteInternal(assetInfo);
|
||||||
}
|
}
|
||||||
@@ -294,7 +296,7 @@ namespace YooAsset
|
|||||||
/// <param name="location">资源的定位地址</param>
|
/// <param name="location">资源的定位地址</param>
|
||||||
public bool IsNeedDownloadFromRemote(AssetInfo assetInfo)
|
public bool IsNeedDownloadFromRemote(AssetInfo assetInfo)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return _fileSystemHost.IsNeedDownloadFromRemoteInternal(assetInfo);
|
return _fileSystemHost.IsNeedDownloadFromRemoteInternal(assetInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -303,7 +305,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public AssetInfo[] GetAllAssetInfos()
|
public AssetInfo[] GetAllAssetInfos()
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return _fileSystemHost.ActiveManifest.GetAllAssetInfos();
|
return _fileSystemHost.ActiveManifest.GetAllAssetInfos();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,7 +315,7 @@ namespace YooAsset
|
|||||||
/// <param name="tag">资源标签</param>
|
/// <param name="tag">资源标签</param>
|
||||||
public AssetInfo[] GetAssetInfos(string tag)
|
public AssetInfo[] GetAssetInfos(string tag)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
string[] tags = new string[] { tag };
|
string[] tags = new string[] { tag };
|
||||||
return _fileSystemHost.ActiveManifest.GetAssetInfosByTags(tags);
|
return _fileSystemHost.ActiveManifest.GetAssetInfosByTags(tags);
|
||||||
}
|
}
|
||||||
@@ -324,7 +326,7 @@ namespace YooAsset
|
|||||||
/// <param name="tags">资源标签列表</param>
|
/// <param name="tags">资源标签列表</param>
|
||||||
public AssetInfo[] GetAssetInfos(string[] tags)
|
public AssetInfo[] GetAssetInfos(string[] tags)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return _fileSystemHost.ActiveManifest.GetAssetInfosByTags(tags);
|
return _fileSystemHost.ActiveManifest.GetAssetInfosByTags(tags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -334,7 +336,7 @@ namespace YooAsset
|
|||||||
/// <param name="location">资源的定位地址</param>
|
/// <param name="location">资源的定位地址</param>
|
||||||
public AssetInfo GetAssetInfo(string location)
|
public AssetInfo GetAssetInfo(string location)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return ConvertLocationToAssetInfo(location, null);
|
return ConvertLocationToAssetInfo(location, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -345,7 +347,7 @@ namespace YooAsset
|
|||||||
/// <param name="type">资源类型</param>
|
/// <param name="type">资源类型</param>
|
||||||
public AssetInfo GetAssetInfo(string location, System.Type type)
|
public AssetInfo GetAssetInfo(string location, System.Type type)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return ConvertLocationToAssetInfo(location, type);
|
return ConvertLocationToAssetInfo(location, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -355,7 +357,7 @@ namespace YooAsset
|
|||||||
/// <param name="assetGUID">资源GUID</param>
|
/// <param name="assetGUID">资源GUID</param>
|
||||||
public AssetInfo GetAssetInfoByGUID(string assetGUID)
|
public AssetInfo GetAssetInfoByGUID(string assetGUID)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return ConvertAssetGUIDToAssetInfo(assetGUID, null);
|
return ConvertAssetGUIDToAssetInfo(assetGUID, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -366,7 +368,7 @@ namespace YooAsset
|
|||||||
/// <param name="type">资源类型</param>
|
/// <param name="type">资源类型</param>
|
||||||
public AssetInfo GetAssetInfoByGUID(string assetGUID, System.Type type)
|
public AssetInfo GetAssetInfoByGUID(string assetGUID, System.Type type)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return ConvertAssetGUIDToAssetInfo(assetGUID, type);
|
return ConvertAssetGUIDToAssetInfo(assetGUID, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -376,7 +378,7 @@ namespace YooAsset
|
|||||||
/// <param name="location">资源的定位地址</param>
|
/// <param name="location">资源的定位地址</param>
|
||||||
public bool CheckLocationValid(string location)
|
public bool CheckLocationValid(string location)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
string assetPath = _fileSystemHost.ActiveManifest.TryMappingToAssetPath(location);
|
string assetPath = _fileSystemHost.ActiveManifest.TryMappingToAssetPath(location);
|
||||||
return string.IsNullOrEmpty(assetPath) == false;
|
return string.IsNullOrEmpty(assetPath) == false;
|
||||||
}
|
}
|
||||||
@@ -389,7 +391,7 @@ namespace YooAsset
|
|||||||
/// <param name="assetInfo">资源信息</param>
|
/// <param name="assetInfo">资源信息</param>
|
||||||
public RawFileHandle LoadRawFileSync(AssetInfo assetInfo)
|
public RawFileHandle LoadRawFileSync(AssetInfo assetInfo)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return LoadRawFileInternal(assetInfo, true, 0);
|
return LoadRawFileInternal(assetInfo, true, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -399,7 +401,7 @@ namespace YooAsset
|
|||||||
/// <param name="location">资源的定位地址</param>
|
/// <param name="location">资源的定位地址</param>
|
||||||
public RawFileHandle LoadRawFileSync(string location)
|
public RawFileHandle LoadRawFileSync(string location)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null);
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null);
|
||||||
return LoadRawFileInternal(assetInfo, true, 0);
|
return LoadRawFileInternal(assetInfo, true, 0);
|
||||||
}
|
}
|
||||||
@@ -411,7 +413,7 @@ namespace YooAsset
|
|||||||
/// <param name="priority">加载的优先级</param>
|
/// <param name="priority">加载的优先级</param>
|
||||||
public RawFileHandle LoadRawFileAsync(AssetInfo assetInfo, uint priority = 0)
|
public RawFileHandle LoadRawFileAsync(AssetInfo assetInfo, uint priority = 0)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return LoadRawFileInternal(assetInfo, false, priority);
|
return LoadRawFileInternal(assetInfo, false, priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -422,7 +424,7 @@ namespace YooAsset
|
|||||||
/// <param name="priority">加载的优先级</param>
|
/// <param name="priority">加载的优先级</param>
|
||||||
public RawFileHandle LoadRawFileAsync(string location, uint priority = 0)
|
public RawFileHandle LoadRawFileAsync(string location, uint priority = 0)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null);
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null);
|
||||||
return LoadRawFileInternal(assetInfo, false, priority);
|
return LoadRawFileInternal(assetInfo, false, priority);
|
||||||
}
|
}
|
||||||
@@ -447,7 +449,7 @@ namespace YooAsset
|
|||||||
/// <param name="physicsMode">场景物理模式</param>
|
/// <param name="physicsMode">场景物理模式</param>
|
||||||
public SceneHandle LoadSceneSync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, LocalPhysicsMode physicsMode = LocalPhysicsMode.None)
|
public SceneHandle LoadSceneSync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, LocalPhysicsMode physicsMode = LocalPhysicsMode.None)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null);
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null);
|
||||||
return LoadSceneInternal(assetInfo, true, sceneMode, physicsMode, false, 0);
|
return LoadSceneInternal(assetInfo, true, sceneMode, physicsMode, false, 0);
|
||||||
}
|
}
|
||||||
@@ -460,7 +462,7 @@ namespace YooAsset
|
|||||||
/// <param name="physicsMode">场景物理模式</param>
|
/// <param name="physicsMode">场景物理模式</param>
|
||||||
public SceneHandle LoadSceneSync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single, LocalPhysicsMode physicsMode = LocalPhysicsMode.None)
|
public SceneHandle LoadSceneSync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single, LocalPhysicsMode physicsMode = LocalPhysicsMode.None)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return LoadSceneInternal(assetInfo, true, sceneMode, physicsMode, false, 0);
|
return LoadSceneInternal(assetInfo, true, sceneMode, physicsMode, false, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -474,7 +476,7 @@ namespace YooAsset
|
|||||||
/// <param name="priority">加载的优先级</param>
|
/// <param name="priority">加载的优先级</param>
|
||||||
public SceneHandle LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, LocalPhysicsMode physicsMode = LocalPhysicsMode.None, bool suspendLoad = false, uint priority = 0)
|
public SceneHandle LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, LocalPhysicsMode physicsMode = LocalPhysicsMode.None, bool suspendLoad = false, uint priority = 0)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null);
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null);
|
||||||
return LoadSceneInternal(assetInfo, false, sceneMode, physicsMode, suspendLoad, priority);
|
return LoadSceneInternal(assetInfo, false, sceneMode, physicsMode, suspendLoad, priority);
|
||||||
}
|
}
|
||||||
@@ -489,13 +491,13 @@ namespace YooAsset
|
|||||||
/// <param name="priority">加载的优先级</param>
|
/// <param name="priority">加载的优先级</param>
|
||||||
public SceneHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single, LocalPhysicsMode physicsMode = LocalPhysicsMode.None, bool suspendLoad = false, uint priority = 0)
|
public SceneHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single, LocalPhysicsMode physicsMode = LocalPhysicsMode.None, bool suspendLoad = false, uint priority = 0)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return LoadSceneInternal(assetInfo, false, sceneMode, physicsMode, suspendLoad, priority);
|
return LoadSceneInternal(assetInfo, false, sceneMode, physicsMode, suspendLoad, priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
private SceneHandle LoadSceneInternal(AssetInfo assetInfo, bool waitForAsyncComplete, LoadSceneMode sceneMode, LocalPhysicsMode physicsMode, bool suspendLoad, uint priority)
|
private SceneHandle LoadSceneInternal(AssetInfo assetInfo, bool waitForAsyncComplete, LoadSceneMode sceneMode, LocalPhysicsMode physicsMode, bool suspendLoad, uint priority)
|
||||||
{
|
{
|
||||||
DebugCheckAssetLoadType(assetInfo.AssetType);
|
DebugEnsureAssetType(assetInfo.AssetType);
|
||||||
assetInfo.LoadMethod = AssetInfo.ELoadMethod.LoadScene;
|
assetInfo.LoadMethod = AssetInfo.ELoadMethod.LoadScene;
|
||||||
var loadSceneParams = new LoadSceneParameters(sceneMode, physicsMode);
|
var loadSceneParams = new LoadSceneParameters(sceneMode, physicsMode);
|
||||||
var handle = _resourceManager.LoadSceneAsync(assetInfo, loadSceneParams, suspendLoad, priority);
|
var handle = _resourceManager.LoadSceneAsync(assetInfo, loadSceneParams, suspendLoad, priority);
|
||||||
@@ -505,14 +507,14 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 资源加载
|
#region 资源加载 [主资源]
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 同步加载资源对象
|
/// 同步加载资源对象
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="assetInfo">资源信息</param>
|
/// <param name="assetInfo">资源信息</param>
|
||||||
public AssetHandle LoadAssetSync(AssetInfo assetInfo)
|
public AssetHandle LoadAssetSync(AssetInfo assetInfo)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return LoadAssetInternal(assetInfo, true, 0);
|
return LoadAssetInternal(assetInfo, true, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -523,7 +525,7 @@ namespace YooAsset
|
|||||||
/// <param name="location">资源的定位地址</param>
|
/// <param name="location">资源的定位地址</param>
|
||||||
public AssetHandle LoadAssetSync<TObject>(string location) where TObject : UnityEngine.Object
|
public AssetHandle LoadAssetSync<TObject>(string location) where TObject : UnityEngine.Object
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, typeof(TObject));
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, typeof(TObject));
|
||||||
return LoadAssetInternal(assetInfo, true, 0);
|
return LoadAssetInternal(assetInfo, true, 0);
|
||||||
}
|
}
|
||||||
@@ -535,7 +537,7 @@ namespace YooAsset
|
|||||||
/// <param name="type">资源类型</param>
|
/// <param name="type">资源类型</param>
|
||||||
public AssetHandle LoadAssetSync(string location, System.Type type)
|
public AssetHandle LoadAssetSync(string location, System.Type type)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, type);
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, type);
|
||||||
return LoadAssetInternal(assetInfo, true, 0);
|
return LoadAssetInternal(assetInfo, true, 0);
|
||||||
}
|
}
|
||||||
@@ -546,9 +548,8 @@ namespace YooAsset
|
|||||||
/// <param name="location">资源的定位地址</param>
|
/// <param name="location">资源的定位地址</param>
|
||||||
public AssetHandle LoadAssetSync(string location)
|
public AssetHandle LoadAssetSync(string location)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
Type type = typeof(UnityEngine.Object);
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, typeof(UnityEngine.Object));
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, type);
|
|
||||||
return LoadAssetInternal(assetInfo, true, 0);
|
return LoadAssetInternal(assetInfo, true, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -560,7 +561,7 @@ namespace YooAsset
|
|||||||
/// <param name="priority">加载的优先级</param>
|
/// <param name="priority">加载的优先级</param>
|
||||||
public AssetHandle LoadAssetAsync(AssetInfo assetInfo, uint priority = 0)
|
public AssetHandle LoadAssetAsync(AssetInfo assetInfo, uint priority = 0)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return LoadAssetInternal(assetInfo, false, priority);
|
return LoadAssetInternal(assetInfo, false, priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -572,7 +573,7 @@ namespace YooAsset
|
|||||||
/// <param name="priority">加载的优先级</param>
|
/// <param name="priority">加载的优先级</param>
|
||||||
public AssetHandle LoadAssetAsync<TObject>(string location, uint priority = 0) where TObject : UnityEngine.Object
|
public AssetHandle LoadAssetAsync<TObject>(string location, uint priority = 0) where TObject : UnityEngine.Object
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, typeof(TObject));
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, typeof(TObject));
|
||||||
return LoadAssetInternal(assetInfo, false, priority);
|
return LoadAssetInternal(assetInfo, false, priority);
|
||||||
}
|
}
|
||||||
@@ -585,7 +586,7 @@ namespace YooAsset
|
|||||||
/// <param name="priority">加载的优先级</param>
|
/// <param name="priority">加载的优先级</param>
|
||||||
public AssetHandle LoadAssetAsync(string location, System.Type type, uint priority = 0)
|
public AssetHandle LoadAssetAsync(string location, System.Type type, uint priority = 0)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, type);
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, type);
|
||||||
return LoadAssetInternal(assetInfo, false, priority);
|
return LoadAssetInternal(assetInfo, false, priority);
|
||||||
}
|
}
|
||||||
@@ -597,16 +598,15 @@ namespace YooAsset
|
|||||||
/// <param name="priority">加载的优先级</param>
|
/// <param name="priority">加载的优先级</param>
|
||||||
public AssetHandle LoadAssetAsync(string location, uint priority = 0)
|
public AssetHandle LoadAssetAsync(string location, uint priority = 0)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
Type type = typeof(UnityEngine.Object);
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, typeof(UnityEngine.Object));
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, type);
|
|
||||||
return LoadAssetInternal(assetInfo, false, priority);
|
return LoadAssetInternal(assetInfo, false, priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private AssetHandle LoadAssetInternal(AssetInfo assetInfo, bool waitForAsyncComplete, uint priority)
|
private AssetHandle LoadAssetInternal(AssetInfo assetInfo, bool waitForAsyncComplete, uint priority)
|
||||||
{
|
{
|
||||||
DebugCheckAssetLoadType(assetInfo.AssetType);
|
DebugEnsureAssetType(assetInfo.AssetType);
|
||||||
assetInfo.LoadMethod = AssetInfo.ELoadMethod.LoadAsset;
|
assetInfo.LoadMethod = AssetInfo.ELoadMethod.LoadAsset;
|
||||||
var handle = _resourceManager.LoadAssetAsync(assetInfo, priority);
|
var handle = _resourceManager.LoadAssetAsync(assetInfo, priority);
|
||||||
if (waitForAsyncComplete)
|
if (waitForAsyncComplete)
|
||||||
@@ -615,14 +615,14 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 资源加载
|
#region 资源加载 [子资源]
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 同步加载子资源对象
|
/// 同步加载子资源对象
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="assetInfo">资源信息</param>
|
/// <param name="assetInfo">资源信息</param>
|
||||||
public SubAssetsHandle LoadSubAssetsSync(AssetInfo assetInfo)
|
public SubAssetsHandle LoadSubAssetsSync(AssetInfo assetInfo)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return LoadSubAssetsInternal(assetInfo, true, 0);
|
return LoadSubAssetsInternal(assetInfo, true, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -633,7 +633,7 @@ namespace YooAsset
|
|||||||
/// <param name="location">资源的定位地址</param>
|
/// <param name="location">资源的定位地址</param>
|
||||||
public SubAssetsHandle LoadSubAssetsSync<TObject>(string location) where TObject : UnityEngine.Object
|
public SubAssetsHandle LoadSubAssetsSync<TObject>(string location) where TObject : UnityEngine.Object
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, typeof(TObject));
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, typeof(TObject));
|
||||||
return LoadSubAssetsInternal(assetInfo, true, 0);
|
return LoadSubAssetsInternal(assetInfo, true, 0);
|
||||||
}
|
}
|
||||||
@@ -645,7 +645,7 @@ namespace YooAsset
|
|||||||
/// <param name="type">子对象类型</param>
|
/// <param name="type">子对象类型</param>
|
||||||
public SubAssetsHandle LoadSubAssetsSync(string location, System.Type type)
|
public SubAssetsHandle LoadSubAssetsSync(string location, System.Type type)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, type);
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, type);
|
||||||
return LoadSubAssetsInternal(assetInfo, true, 0);
|
return LoadSubAssetsInternal(assetInfo, true, 0);
|
||||||
}
|
}
|
||||||
@@ -656,9 +656,8 @@ namespace YooAsset
|
|||||||
/// <param name="location">资源的定位地址</param>
|
/// <param name="location">资源的定位地址</param>
|
||||||
public SubAssetsHandle LoadSubAssetsSync(string location)
|
public SubAssetsHandle LoadSubAssetsSync(string location)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
Type type = typeof(UnityEngine.Object);
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, typeof(UnityEngine.Object));
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, type);
|
|
||||||
return LoadSubAssetsInternal(assetInfo, true, 0);
|
return LoadSubAssetsInternal(assetInfo, true, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -670,7 +669,7 @@ namespace YooAsset
|
|||||||
/// <param name="priority">加载的优先级</param>
|
/// <param name="priority">加载的优先级</param>
|
||||||
public SubAssetsHandle LoadSubAssetsAsync(AssetInfo assetInfo, uint priority = 0)
|
public SubAssetsHandle LoadSubAssetsAsync(AssetInfo assetInfo, uint priority = 0)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return LoadSubAssetsInternal(assetInfo, false, priority);
|
return LoadSubAssetsInternal(assetInfo, false, priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -682,7 +681,7 @@ namespace YooAsset
|
|||||||
/// <param name="priority">加载的优先级</param>
|
/// <param name="priority">加载的优先级</param>
|
||||||
public SubAssetsHandle LoadSubAssetsAsync<TObject>(string location, uint priority = 0) where TObject : UnityEngine.Object
|
public SubAssetsHandle LoadSubAssetsAsync<TObject>(string location, uint priority = 0) where TObject : UnityEngine.Object
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, typeof(TObject));
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, typeof(TObject));
|
||||||
return LoadSubAssetsInternal(assetInfo, false, priority);
|
return LoadSubAssetsInternal(assetInfo, false, priority);
|
||||||
}
|
}
|
||||||
@@ -695,7 +694,7 @@ namespace YooAsset
|
|||||||
/// <param name="priority">加载的优先级</param>
|
/// <param name="priority">加载的优先级</param>
|
||||||
public SubAssetsHandle LoadSubAssetsAsync(string location, System.Type type, uint priority = 0)
|
public SubAssetsHandle LoadSubAssetsAsync(string location, System.Type type, uint priority = 0)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, type);
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, type);
|
||||||
return LoadSubAssetsInternal(assetInfo, false, priority);
|
return LoadSubAssetsInternal(assetInfo, false, priority);
|
||||||
}
|
}
|
||||||
@@ -707,16 +706,15 @@ namespace YooAsset
|
|||||||
/// <param name="priority">加载的优先级</param>
|
/// <param name="priority">加载的优先级</param>
|
||||||
public SubAssetsHandle LoadSubAssetsAsync(string location, uint priority = 0)
|
public SubAssetsHandle LoadSubAssetsAsync(string location, uint priority = 0)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
Type type = typeof(UnityEngine.Object);
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, typeof(UnityEngine.Object));
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, type);
|
|
||||||
return LoadSubAssetsInternal(assetInfo, false, priority);
|
return LoadSubAssetsInternal(assetInfo, false, priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private SubAssetsHandle LoadSubAssetsInternal(AssetInfo assetInfo, bool waitForAsyncComplete, uint priority)
|
private SubAssetsHandle LoadSubAssetsInternal(AssetInfo assetInfo, bool waitForAsyncComplete, uint priority)
|
||||||
{
|
{
|
||||||
DebugCheckAssetLoadType(assetInfo.AssetType);
|
DebugEnsureAssetType(assetInfo.AssetType);
|
||||||
assetInfo.LoadMethod = AssetInfo.ELoadMethod.LoadSubAssets;
|
assetInfo.LoadMethod = AssetInfo.ELoadMethod.LoadSubAssets;
|
||||||
var handle = _resourceManager.LoadSubAssetsAsync(assetInfo, priority);
|
var handle = _resourceManager.LoadSubAssetsAsync(assetInfo, priority);
|
||||||
if (waitForAsyncComplete)
|
if (waitForAsyncComplete)
|
||||||
@@ -725,14 +723,14 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 资源加载
|
#region 资源加载 [全部资源]
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 同步加载资源包内所有资源对象
|
/// 同步加载资源包内所有资源对象
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="assetInfo">资源信息</param>
|
/// <param name="assetInfo">资源信息</param>
|
||||||
public AllAssetsHandle LoadAllAssetsSync(AssetInfo assetInfo)
|
public AllAssetsHandle LoadAllAssetsSync(AssetInfo assetInfo)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return LoadAllAssetsInternal(assetInfo, true, 0);
|
return LoadAllAssetsInternal(assetInfo, true, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -743,7 +741,7 @@ namespace YooAsset
|
|||||||
/// <param name="location">资源的定位地址</param>
|
/// <param name="location">资源的定位地址</param>
|
||||||
public AllAssetsHandle LoadAllAssetsSync<TObject>(string location) where TObject : UnityEngine.Object
|
public AllAssetsHandle LoadAllAssetsSync<TObject>(string location) where TObject : UnityEngine.Object
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, typeof(TObject));
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, typeof(TObject));
|
||||||
return LoadAllAssetsInternal(assetInfo, true, 0);
|
return LoadAllAssetsInternal(assetInfo, true, 0);
|
||||||
}
|
}
|
||||||
@@ -755,7 +753,7 @@ namespace YooAsset
|
|||||||
/// <param name="type">子对象类型</param>
|
/// <param name="type">子对象类型</param>
|
||||||
public AllAssetsHandle LoadAllAssetsSync(string location, System.Type type)
|
public AllAssetsHandle LoadAllAssetsSync(string location, System.Type type)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, type);
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, type);
|
||||||
return LoadAllAssetsInternal(assetInfo, true, 0);
|
return LoadAllAssetsInternal(assetInfo, true, 0);
|
||||||
}
|
}
|
||||||
@@ -766,9 +764,8 @@ namespace YooAsset
|
|||||||
/// <param name="location">资源的定位地址</param>
|
/// <param name="location">资源的定位地址</param>
|
||||||
public AllAssetsHandle LoadAllAssetsSync(string location)
|
public AllAssetsHandle LoadAllAssetsSync(string location)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
Type type = typeof(UnityEngine.Object);
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, typeof(UnityEngine.Object));
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, type);
|
|
||||||
return LoadAllAssetsInternal(assetInfo, true, 0);
|
return LoadAllAssetsInternal(assetInfo, true, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -780,7 +777,7 @@ namespace YooAsset
|
|||||||
/// <param name="priority">加载的优先级</param>
|
/// <param name="priority">加载的优先级</param>
|
||||||
public AllAssetsHandle LoadAllAssetsAsync(AssetInfo assetInfo, uint priority = 0)
|
public AllAssetsHandle LoadAllAssetsAsync(AssetInfo assetInfo, uint priority = 0)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return LoadAllAssetsInternal(assetInfo, false, priority);
|
return LoadAllAssetsInternal(assetInfo, false, priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -792,7 +789,7 @@ namespace YooAsset
|
|||||||
/// <param name="priority">加载的优先级</param>
|
/// <param name="priority">加载的优先级</param>
|
||||||
public AllAssetsHandle LoadAllAssetsAsync<TObject>(string location, uint priority = 0) where TObject : UnityEngine.Object
|
public AllAssetsHandle LoadAllAssetsAsync<TObject>(string location, uint priority = 0) where TObject : UnityEngine.Object
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, typeof(TObject));
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, typeof(TObject));
|
||||||
return LoadAllAssetsInternal(assetInfo, false, priority);
|
return LoadAllAssetsInternal(assetInfo, false, priority);
|
||||||
}
|
}
|
||||||
@@ -805,7 +802,7 @@ namespace YooAsset
|
|||||||
/// <param name="priority">加载的优先级</param>
|
/// <param name="priority">加载的优先级</param>
|
||||||
public AllAssetsHandle LoadAllAssetsAsync(string location, System.Type type, uint priority = 0)
|
public AllAssetsHandle LoadAllAssetsAsync(string location, System.Type type, uint priority = 0)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, type);
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, type);
|
||||||
return LoadAllAssetsInternal(assetInfo, false, priority);
|
return LoadAllAssetsInternal(assetInfo, false, priority);
|
||||||
}
|
}
|
||||||
@@ -817,16 +814,15 @@ namespace YooAsset
|
|||||||
/// <param name="priority">加载的优先级</param>
|
/// <param name="priority">加载的优先级</param>
|
||||||
public AllAssetsHandle LoadAllAssetsAsync(string location, uint priority = 0)
|
public AllAssetsHandle LoadAllAssetsAsync(string location, uint priority = 0)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
Type type = typeof(UnityEngine.Object);
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, typeof(UnityEngine.Object));
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, type);
|
|
||||||
return LoadAllAssetsInternal(assetInfo, false, priority);
|
return LoadAllAssetsInternal(assetInfo, false, priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private AllAssetsHandle LoadAllAssetsInternal(AssetInfo assetInfo, bool waitForAsyncComplete, uint priority)
|
private AllAssetsHandle LoadAllAssetsInternal(AssetInfo assetInfo, bool waitForAsyncComplete, uint priority)
|
||||||
{
|
{
|
||||||
DebugCheckAssetLoadType(assetInfo.AssetType);
|
DebugEnsureAssetType(assetInfo.AssetType);
|
||||||
assetInfo.LoadMethod = AssetInfo.ELoadMethod.LoadAllAssets;
|
assetInfo.LoadMethod = AssetInfo.ELoadMethod.LoadAllAssets;
|
||||||
var handle = _resourceManager.LoadAllAssetsAsync(assetInfo, priority);
|
var handle = _resourceManager.LoadAllAssetsAsync(assetInfo, priority);
|
||||||
if (waitForAsyncComplete)
|
if (waitForAsyncComplete)
|
||||||
@@ -841,7 +837,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public ResourceDownloaderOperation CreateResourceDownloader(ResourceDownloaderOptions options)
|
public ResourceDownloaderOperation CreateResourceDownloader(ResourceDownloaderOptions options)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return _fileSystemHost.CreateResourceDownloader(options);
|
return _fileSystemHost.CreateResourceDownloader(options);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -850,7 +846,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public ResourceDownloaderOperation CreateResourceDownloader(BundleDownloaderOptions options)
|
public ResourceDownloaderOperation CreateResourceDownloader(BundleDownloaderOptions options)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return _fileSystemHost.CreateResourceDownloader(options);
|
return _fileSystemHost.CreateResourceDownloader(options);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
@@ -861,7 +857,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public ResourceUnpackerOperation CreateResourceUnpacker(ResourceUnpackerOptions options)
|
public ResourceUnpackerOperation CreateResourceUnpacker(ResourceUnpackerOptions options)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return _fileSystemHost.CreateResourceUnpacker(options);
|
return _fileSystemHost.CreateResourceUnpacker(options);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
@@ -872,7 +868,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public ResourceImporterOperation CreateResourceImporter(BundleImporterOptions options)
|
public ResourceImporterOperation CreateResourceImporter(BundleImporterOptions options)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
EnsureInitialized();
|
||||||
return _fileSystemHost.CreateResourceImporter(options);
|
return _fileSystemHost.CreateResourceImporter(options);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
@@ -889,22 +885,22 @@ namespace YooAsset
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 调试方法
|
#region 调试方法
|
||||||
private void DebugCheckInitialize(bool checkActiveManifest = true)
|
private void EnsureInitialized(bool checkActiveManifest = true)
|
||||||
{
|
{
|
||||||
if (InitializeStatus != EOperationStatus.Succeed)
|
if (InitializeStatus != EOperationStatus.Succeed)
|
||||||
{
|
{
|
||||||
if (InitializeStatus == EOperationStatus.None)
|
if (InitializeStatus == EOperationStatus.None)
|
||||||
{
|
{
|
||||||
throw new YooPackageException(PackageName, "Package not initialize !");
|
throw new YooPackageException(PackageName, "Resource package not initialized!");
|
||||||
}
|
}
|
||||||
else if (InitializeStatus == EOperationStatus.Processing)
|
else if (InitializeStatus == EOperationStatus.Processing)
|
||||||
{
|
{
|
||||||
throw new YooPackageException(PackageName, "Package initialize not completed !");
|
throw new YooPackageException(PackageName, "Resource package initialization not completed!");
|
||||||
}
|
}
|
||||||
else if (InitializeStatus == EOperationStatus.Failed)
|
else if (InitializeStatus == EOperationStatus.Failed)
|
||||||
{
|
{
|
||||||
string error = _initializeOp == null ? string.Empty : _initializeOp.Error;
|
string error = _initializeOp == null ? string.Empty : _initializeOp.Error;
|
||||||
throw new YooPackageException(PackageName, $"Package initialize failed ! {error}");
|
throw new YooPackageException(PackageName, $"Resource package initialization failed! Error : {error}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -916,20 +912,16 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Conditional("DEBUG")]
|
[Conditional("DEBUG")]
|
||||||
private void DebugCheckAssetLoadType(System.Type type)
|
private void DebugEnsureAssetType(System.Type type)
|
||||||
{
|
{
|
||||||
if (type == null)
|
if (type == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (typeof(UnityEngine.Behaviour).IsAssignableFrom(type))
|
if (typeof(UnityEngine.Behaviour).IsAssignableFrom(type))
|
||||||
{
|
throw new YooLoadException($"Load asset type is invalid : {type.FullName}");
|
||||||
throw new YooLoadException($"Load asset type is invalid : {type.FullName} !");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof(UnityEngine.Object).IsAssignableFrom(type) == false)
|
if (typeof(UnityEngine.Object).IsAssignableFrom(type) == false)
|
||||||
{
|
throw new YooLoadException($"Load asset type is invalid : {type.FullName}");
|
||||||
throw new YooLoadException($"Load asset type is invalid : {type.FullName} !");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|||||||
@@ -13,21 +13,21 @@ namespace YooAsset
|
|||||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
|
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
|
||||||
private static void OnRuntimeInitialize()
|
private static void OnRuntimeInitialize()
|
||||||
{
|
{
|
||||||
_isInitialize = false;
|
_isInitialized = false;
|
||||||
_packages.Clear();
|
_packages.Clear();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
private static bool _isInitialize = false;
|
private static bool _isInitialized;
|
||||||
private static GameObject _driver = null;
|
private static GameObject _driver;
|
||||||
private static readonly List<ResourcePackage> _packages = new List<ResourcePackage>();
|
private static readonly Dictionary<string, ResourcePackage> _packages = new Dictionary<string, ResourcePackage>(10);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否已经初始化
|
/// 是否已经初始化
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static bool Initialized
|
public static bool Initialized
|
||||||
{
|
{
|
||||||
get { return _isInitialize; }
|
get { return _isInitialized; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -36,22 +36,19 @@ namespace YooAsset
|
|||||||
/// <param name="logger">自定义日志处理</param>
|
/// <param name="logger">自定义日志处理</param>
|
||||||
public static void Initialize(ILogger logger = null)
|
public static void Initialize(ILogger logger = null)
|
||||||
{
|
{
|
||||||
if (_isInitialize)
|
if (_isInitialized)
|
||||||
{
|
{
|
||||||
UnityEngine.Debug.LogWarning($"{nameof(YooAssets)} is initialized !");
|
YooLogger.Warning("YooAssets is already initialized!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_isInitialize == false)
|
|
||||||
{
|
|
||||||
YooLogger.Logger = logger;
|
YooLogger.Logger = logger;
|
||||||
|
|
||||||
// 创建驱动器
|
// 创建驱动器
|
||||||
_isInitialize = true;
|
_isInitialized = true;
|
||||||
_driver = new UnityEngine.GameObject($"[{nameof(YooAssets)}]");
|
_driver = new UnityEngine.GameObject($"[{nameof(YooAssets)}]");
|
||||||
_driver.AddComponent<YooAssetsDriver>();
|
_driver.AddComponent<YooAssetsDriver>();
|
||||||
UnityEngine.Object.DontDestroyOnLoad(_driver);
|
UnityEngine.Object.DontDestroyOnLoad(_driver);
|
||||||
YooLogger.Log($"{nameof(YooAssets)} initialize !");
|
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
// 添加远程调试脚本
|
// 添加远程调试脚本
|
||||||
@@ -61,16 +58,15 @@ namespace YooAsset
|
|||||||
// 初始化异步操作系统
|
// 初始化异步操作系统
|
||||||
OperationSystem.Initialize();
|
OperationSystem.Initialize();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 销毁资源系统
|
/// 销毁资源系统
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static void Destroy()
|
public static void Destroy()
|
||||||
{
|
{
|
||||||
if (_isInitialize)
|
if (_isInitialized)
|
||||||
{
|
{
|
||||||
_isInitialize = false;
|
_isInitialized = false;
|
||||||
|
|
||||||
if (_driver != null)
|
if (_driver != null)
|
||||||
GameObject.Destroy(_driver);
|
GameObject.Destroy(_driver);
|
||||||
@@ -91,35 +87,25 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
internal static void Update()
|
internal static void Update()
|
||||||
{
|
{
|
||||||
if (_isInitialize)
|
if (_isInitialized)
|
||||||
{
|
{
|
||||||
OperationSystem.Update();
|
OperationSystem.Update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 创建资源包裹
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="packageName">包裹名称</param>
|
|
||||||
public static ResourcePackage CreatePackage(string packageName)
|
|
||||||
{
|
|
||||||
return CreatePackage(packageName, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 创建资源包裹
|
/// 创建资源包裹
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="packageName">包裹名称</param>
|
/// <param name="packageName">包裹名称</param>
|
||||||
/// <param name="packagePriority">包裹优先级(值越大越优先更新)</param>
|
/// <param name="packagePriority">包裹优先级(值越大越优先更新)</param>
|
||||||
public static ResourcePackage CreatePackage(string packageName, uint packagePriority)
|
public static ResourcePackage CreatePackage(string packageName, uint packagePriority = 0)
|
||||||
{
|
{
|
||||||
CheckException(packageName);
|
EnsureInitialized(packageName);
|
||||||
if (ContainsPackage(packageName))
|
if (ContainsPackage(packageName))
|
||||||
throw new YooPackageException(packageName, $"Package {packageName} already existed ! Cannot create duplicate packages.");
|
throw new YooPackageException(packageName, $"Resource package {packageName} already existed! Cannot create duplicate packages.");
|
||||||
|
|
||||||
YooLogger.Log($"Create resource package : {packageName}");
|
|
||||||
ResourcePackage package = new ResourcePackage(packageName);
|
ResourcePackage package = new ResourcePackage(packageName);
|
||||||
_packages.Add(package);
|
_packages.Add(packageName, package);
|
||||||
|
|
||||||
// 注册包裹调度器
|
// 注册包裹调度器
|
||||||
OperationSystem.CreatePackageScheduler(packageName, packagePriority);
|
OperationSystem.CreatePackageScheduler(packageName, packagePriority);
|
||||||
@@ -133,7 +119,7 @@ namespace YooAsset
|
|||||||
/// <param name="packageName">包裹名称</param>
|
/// <param name="packageName">包裹名称</param>
|
||||||
public static ResourcePackage GetPackage(string packageName)
|
public static ResourcePackage GetPackage(string packageName)
|
||||||
{
|
{
|
||||||
CheckException(packageName);
|
EnsureInitialized(packageName);
|
||||||
var package = GetPackageInternal(packageName);
|
var package = GetPackageInternal(packageName);
|
||||||
if (package == null)
|
if (package == null)
|
||||||
YooLogger.Error($"Can not found resource package : {packageName}");
|
YooLogger.Error($"Can not found resource package : {packageName}");
|
||||||
@@ -146,16 +132,16 @@ namespace YooAsset
|
|||||||
/// <param name="packageName">包裹名称</param>
|
/// <param name="packageName">包裹名称</param>
|
||||||
public static ResourcePackage TryGetPackage(string packageName)
|
public static ResourcePackage TryGetPackage(string packageName)
|
||||||
{
|
{
|
||||||
CheckException(packageName);
|
EnsureInitialized(packageName);
|
||||||
return GetPackageInternal(packageName);
|
return GetPackageInternal(packageName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取所有资源包裹
|
/// 获取所有资源包裹
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static List<ResourcePackage> GetAllPackages()
|
public static IReadOnlyList<ResourcePackage> GetAllPackages()
|
||||||
{
|
{
|
||||||
return _packages.ToList();
|
return _packages.Values.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -164,35 +150,24 @@ namespace YooAsset
|
|||||||
/// <param name="packageName">包裹名称</param>
|
/// <param name="packageName">包裹名称</param>
|
||||||
public static bool RemovePackage(string packageName)
|
public static bool RemovePackage(string packageName)
|
||||||
{
|
{
|
||||||
CheckException(packageName);
|
EnsureInitialized(packageName);
|
||||||
ResourcePackage package = GetPackageInternal(packageName);
|
ResourcePackage package = GetPackageInternal(packageName);
|
||||||
if (package == null)
|
if (package == null)
|
||||||
|
{
|
||||||
|
YooLogger.Error($"Can not found resource package : {packageName}");
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return RemovePackage(package);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 移除资源包裹
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="package">包裹实例对象</param>
|
|
||||||
public static bool RemovePackage(ResourcePackage package)
|
|
||||||
{
|
|
||||||
CheckException(package);
|
|
||||||
string packageName = package.PackageName;
|
|
||||||
if (package.InitializeStatus != EOperationStatus.None)
|
if (package.InitializeStatus != EOperationStatus.None)
|
||||||
{
|
{
|
||||||
YooLogger.Error($"The resource package {packageName} has not been destroyed, please call the method {nameof(ResourcePackage.DestroyPackageAsync)} to destroy!");
|
YooLogger.Error($"The resource package {packageName} has not been destroyed, please call the method {nameof(ResourcePackage.DestroyPackageAsync)} to destroy!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
YooLogger.Log($"Remove resource package : {packageName}");
|
|
||||||
|
|
||||||
// 先销毁调度器,再移除包裹
|
// 先销毁调度器,再移除包裹
|
||||||
OperationSystem.DestroyPackageScheduler(packageName);
|
OperationSystem.DestroyPackageScheduler(packageName);
|
||||||
|
|
||||||
_packages.Remove(package);
|
return _packages.Remove(packageName);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -201,36 +176,24 @@ namespace YooAsset
|
|||||||
/// <param name="packageName">包裹名称</param>
|
/// <param name="packageName">包裹名称</param>
|
||||||
public static bool ContainsPackage(string packageName)
|
public static bool ContainsPackage(string packageName)
|
||||||
{
|
{
|
||||||
CheckException(packageName);
|
EnsureInitialized(packageName);
|
||||||
var package = GetPackageInternal(packageName);
|
var package = GetPackageInternal(packageName);
|
||||||
return package != null;
|
return package != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ResourcePackage GetPackageInternal(string packageName)
|
private static ResourcePackage GetPackageInternal(string packageName)
|
||||||
{
|
{
|
||||||
foreach (var package in _packages)
|
_packages.TryGetValue(packageName, out var package);
|
||||||
{
|
|
||||||
if (package.PackageName == packageName)
|
|
||||||
return package;
|
return package;
|
||||||
}
|
}
|
||||||
return null;
|
private static void EnsureInitialized(string packageName)
|
||||||
}
|
|
||||||
private static void CheckException(string packageName)
|
|
||||||
{
|
{
|
||||||
if (_isInitialize == false)
|
if (_isInitialized == false)
|
||||||
throw new YooInitializeException($"{nameof(YooAssets)} not initialized ! Please call {nameof(YooAssets.Initialize)} first.");
|
throw new YooInitializeException($"YooAssets not initialized! Please call {nameof(YooAssets.Initialize)} first.");
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(packageName))
|
if (string.IsNullOrEmpty(packageName))
|
||||||
throw new YooInitializeException("Package name cannot be null or empty!");
|
throw new YooInitializeException("Package name cannot be null or empty!");
|
||||||
}
|
}
|
||||||
private static void CheckException(ResourcePackage package)
|
|
||||||
{
|
|
||||||
if (_isInitialize == false)
|
|
||||||
throw new YooInitializeException($"{nameof(YooAssets)} not initialized ! Please call {nameof(YooAssets.Initialize)} first.");
|
|
||||||
|
|
||||||
if (package == null)
|
|
||||||
throw new YooInitializeException("Package instance cannot be null !");
|
|
||||||
}
|
|
||||||
|
|
||||||
#region 系统参数
|
#region 系统参数
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -248,9 +211,9 @@ namespace YooAsset
|
|||||||
DebugReport report = new DebugReport();
|
DebugReport report = new DebugReport();
|
||||||
report.FrameCount = Time.frameCount;
|
report.FrameCount = Time.frameCount;
|
||||||
|
|
||||||
foreach (var package in _packages)
|
foreach (var kv in _packages)
|
||||||
{
|
{
|
||||||
var packageData = package.GetDebugPackageData();
|
var packageData = kv.Value.GetDebugPackageData();
|
||||||
report.PackageDatas.Add(packageData);
|
report.PackageDatas.Add(packageData);
|
||||||
}
|
}
|
||||||
return report;
|
return report;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ public static class YooAssetsExtension
|
|||||||
public static LoadGameObjectOperation LoadGameObjectAsync(this ResourcePackage package, string location, Vector3 position, Quaternion rotation, Transform parent, bool destroyGoOnRelease = false)
|
public static LoadGameObjectOperation LoadGameObjectAsync(this ResourcePackage package, string location, Vector3 position, Quaternion rotation, Transform parent, bool destroyGoOnRelease = false)
|
||||||
{
|
{
|
||||||
var operation = new LoadGameObjectOperation(package.PackageName, location, position, rotation, parent, destroyGoOnRelease);
|
var operation = new LoadGameObjectOperation(package.PackageName, location, position, rotation, parent, destroyGoOnRelease);
|
||||||
OperationSystem.StartOperation(OperationSystem.GLOBAL_SCHEDULER_NAME, operation);
|
OperationSystem.StartOperation(OperationSystem.GlobalSchedulerName, operation);
|
||||||
return operation;
|
return operation;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,6 @@ public class OperationHelper
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static void StartOperation(AsyncOperationBase operation)
|
public static void StartOperation(AsyncOperationBase operation)
|
||||||
{
|
{
|
||||||
OperationSystem.StartOperation(OperationSystem.GLOBAL_SCHEDULER_NAME, operation);
|
OperationSystem.StartOperation(OperationSystem.GlobalSchedulerName, operation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user