mirror of https://github.com/tuyoogame/YooAsset
parent
65875b66c2
commit
afc08d4e46
|
@ -130,7 +130,7 @@ namespace YooAsset
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 异步加载场景
|
/// 加载场景
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static SceneOperationHandle LoadSceneAsync(string scenePath, LoadSceneMode sceneMode, bool activateOnLoad, int priority)
|
public static SceneOperationHandle LoadSceneAsync(string scenePath, LoadSceneMode sceneMode, bool activateOnLoad, int priority)
|
||||||
{
|
{
|
||||||
|
@ -161,7 +161,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 异步加载资源对象
|
/// 加载资源对象
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static AssetOperationHandle LoadAssetAsync(string assetPath, System.Type assetType)
|
public static AssetOperationHandle LoadAssetAsync(string assetPath, System.Type assetType)
|
||||||
{
|
{
|
||||||
|
@ -179,7 +179,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 异步加载所有子资源对象
|
/// 加载子资源对象
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static SubAssetsOperationHandle LoadSubAssetsAsync(string assetPath, System.Type assetType)
|
public static SubAssetsOperationHandle LoadSubAssetsAsync(string assetPath, System.Type assetType)
|
||||||
{
|
{
|
||||||
|
@ -196,6 +196,24 @@ namespace YooAsset
|
||||||
return provider.CreateHandle() as SubAssetsOperationHandle;
|
return provider.CreateHandle() as SubAssetsOperationHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 加载资源包里的所有资源对象
|
||||||
|
/// </summary>
|
||||||
|
public static AllAssetsOperationHandle LoadAllAssetsAsync(string assetPath, System.Type assetType)
|
||||||
|
{
|
||||||
|
ProviderBase provider = TryGetProvider(assetPath);
|
||||||
|
if (provider == null)
|
||||||
|
{
|
||||||
|
if (SimulationOnEditor)
|
||||||
|
provider = new DatabaseAllAssetsProvider(assetPath, assetType);
|
||||||
|
else
|
||||||
|
provider = new BundledAllAssetsProvider(assetPath, assetType);
|
||||||
|
provider.InitSpawnDebugInfo();
|
||||||
|
_providers.Add(provider);
|
||||||
|
}
|
||||||
|
return provider.CreateHandle() as AllAssetsOperationHandle;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
internal static void UnloadSubScene(ProviderBase provider)
|
internal static void UnloadSubScene(ProviderBase provider)
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
|
||||||
|
namespace YooAsset
|
||||||
|
{
|
||||||
|
public sealed class AllAssetsOperationHandle : OperationHandleBase
|
||||||
|
{
|
||||||
|
private System.Action<AllAssetsOperationHandle> _callback;
|
||||||
|
|
||||||
|
internal AllAssetsOperationHandle(ProviderBase provider) : base(provider)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
internal override void InvokeCallback()
|
||||||
|
{
|
||||||
|
_callback?.Invoke(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 完成委托
|
||||||
|
/// </summary>
|
||||||
|
public event System.Action<AllAssetsOperationHandle> Completed
|
||||||
|
{
|
||||||
|
add
|
||||||
|
{
|
||||||
|
if (IsValid == false)
|
||||||
|
throw new System.Exception($"{nameof(AllAssetsOperationHandle)} is invalid");
|
||||||
|
if (Provider.IsDone)
|
||||||
|
value.Invoke(this);
|
||||||
|
else
|
||||||
|
_callback += value;
|
||||||
|
}
|
||||||
|
remove
|
||||||
|
{
|
||||||
|
if (IsValid == false)
|
||||||
|
throw new System.Exception($"{nameof(AllAssetsOperationHandle)} is invalid");
|
||||||
|
_callback -= value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 资源包内的资源对象集合
|
||||||
|
/// </summary>
|
||||||
|
public UnityEngine.Object[] AllAssetObjects
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (IsValid == false)
|
||||||
|
return null;
|
||||||
|
return Provider.AllAssetObjects;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 等待异步执行完毕
|
||||||
|
/// </summary>
|
||||||
|
public void WaitForAsyncComplete()
|
||||||
|
{
|
||||||
|
if (IsValid == false)
|
||||||
|
return;
|
||||||
|
Provider.WaitForAsyncComplete();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 释放资源句柄
|
||||||
|
/// </summary>
|
||||||
|
public void Release()
|
||||||
|
{
|
||||||
|
this.ReleaseInternal();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 05c287035a2264f469a654a6152b02c9
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,116 @@
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace YooAsset
|
||||||
|
{
|
||||||
|
internal sealed class BundledAllAssetsProvider : BundledProvider
|
||||||
|
{
|
||||||
|
private AssetBundleRequest _cacheRequest;
|
||||||
|
public override float Progress
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_cacheRequest == null)
|
||||||
|
return 0;
|
||||||
|
return _cacheRequest.progress;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public BundledAllAssetsProvider(string assetPath, System.Type assetType)
|
||||||
|
: base(assetPath, assetType)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public override void Update()
|
||||||
|
{
|
||||||
|
if (IsDone)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (Status == EStatus.None)
|
||||||
|
{
|
||||||
|
Status = EStatus.CheckBundle;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1. 检测资源包
|
||||||
|
if (Status == EStatus.CheckBundle)
|
||||||
|
{
|
||||||
|
if (IsWaitForAsyncComplete)
|
||||||
|
{
|
||||||
|
DependBundles.WaitForAsyncComplete();
|
||||||
|
OwnerBundle.WaitForAsyncComplete();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DependBundles.IsDone() == false)
|
||||||
|
return;
|
||||||
|
if (OwnerBundle.IsDone() == false)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (DependBundles.IsSucceed() == false)
|
||||||
|
{
|
||||||
|
Status = EStatus.Fail;
|
||||||
|
LastError = DependBundles.GetLastError();
|
||||||
|
InvokeCompletion();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (OwnerBundle.Status != AssetBundleLoaderBase.EStatus.Succeed)
|
||||||
|
{
|
||||||
|
Status = EStatus.Fail;
|
||||||
|
LastError = OwnerBundle.LastError;
|
||||||
|
InvokeCompletion();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = EStatus.Loading;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 加载资源对象
|
||||||
|
if (Status == EStatus.Loading)
|
||||||
|
{
|
||||||
|
if (IsWaitForAsyncComplete)
|
||||||
|
{
|
||||||
|
if (AssetType == null)
|
||||||
|
AllAssetObjects = OwnerBundle.CacheBundle.LoadAllAssets();
|
||||||
|
else
|
||||||
|
AllAssetObjects = OwnerBundle.CacheBundle.LoadAllAssets(AssetType);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (AssetType == null)
|
||||||
|
_cacheRequest = OwnerBundle.CacheBundle.LoadAllAssetsAsync();
|
||||||
|
else
|
||||||
|
_cacheRequest = OwnerBundle.CacheBundle.LoadAllAssetsAsync(AssetType);
|
||||||
|
}
|
||||||
|
Status = EStatus.Checking;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. 检测加载结果
|
||||||
|
if (Status == EStatus.Checking)
|
||||||
|
{
|
||||||
|
if (_cacheRequest != null)
|
||||||
|
{
|
||||||
|
if (IsWaitForAsyncComplete)
|
||||||
|
{
|
||||||
|
// 强制挂起主线程(注意:该操作会很耗时)
|
||||||
|
YooLogger.Warning("Suspend the main thread to load unity asset.");
|
||||||
|
AllAssetObjects = _cacheRequest.allAssets;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (_cacheRequest.isDone == false)
|
||||||
|
return;
|
||||||
|
AllAssetObjects = _cacheRequest.allAssets;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = AllAssetObjects == null ? EStatus.Fail : EStatus.Success;
|
||||||
|
if (Status == EStatus.Fail)
|
||||||
|
{
|
||||||
|
LastError = $"Failed to load all assets from bundle : {OwnerBundle.BundleFileInfo.BundleName}";
|
||||||
|
YooLogger.Error(LastError);
|
||||||
|
}
|
||||||
|
InvokeCompletion();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: dd972d8e33cbbaf4aa7f976d59896b0e
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -0,0 +1,127 @@
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace YooAsset
|
||||||
|
{
|
||||||
|
internal sealed class DatabaseAllAssetsProvider : ProviderBase
|
||||||
|
{
|
||||||
|
private string _bundleName;
|
||||||
|
|
||||||
|
public override float Progress
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (IsDone)
|
||||||
|
return 100f;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public DatabaseAllAssetsProvider(string assetPath, System.Type assetType)
|
||||||
|
: base(assetPath, assetType)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public override void Update()
|
||||||
|
{
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
if (IsDone)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (Status == EStatus.None)
|
||||||
|
{
|
||||||
|
// 检测资源文件是否存在
|
||||||
|
string guid = UnityEditor.AssetDatabase.AssetPathToGUID(AssetPath);
|
||||||
|
if (string.IsNullOrEmpty(guid))
|
||||||
|
{
|
||||||
|
Status = EStatus.Fail;
|
||||||
|
LastError = $"Not found asset : {AssetPath}";
|
||||||
|
YooLogger.Error(LastError);
|
||||||
|
InvokeCompletion();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取资源包名称
|
||||||
|
_bundleName = AssetSystem.BundleServices.GetBundleName(AssetPath);
|
||||||
|
if (string.IsNullOrEmpty(_bundleName))
|
||||||
|
{
|
||||||
|
Status = EStatus.Fail;
|
||||||
|
LastError = $"Not found bundle name : {AssetPath}";
|
||||||
|
YooLogger.Error(LastError);
|
||||||
|
InvokeCompletion();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = EStatus.Loading;
|
||||||
|
|
||||||
|
// 注意:模拟异步加载效果提前返回
|
||||||
|
if (IsWaitForAsyncComplete == false)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1. 加载资源对象
|
||||||
|
if (Status == EStatus.Loading)
|
||||||
|
{
|
||||||
|
bool loadFailed = false;
|
||||||
|
if (AssetType == null)
|
||||||
|
{
|
||||||
|
List<UnityEngine.Object> result = new List<Object>(100);
|
||||||
|
AssetInfo[] allAssetInfos = AssetSystem.BundleServices.GetAssetInfos(_bundleName);
|
||||||
|
foreach (var assetInfo in allAssetInfos)
|
||||||
|
{
|
||||||
|
var assetObject = UnityEditor.AssetDatabase.LoadMainAssetAtPath(assetInfo.AssetPath);
|
||||||
|
if (assetObject != null)
|
||||||
|
{
|
||||||
|
result.Add(assetObject);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
YooLogger.Warning($"Failed to load main asset : {assetInfo.AssetPath}");
|
||||||
|
loadFailed = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (loadFailed == false)
|
||||||
|
AllAssetObjects = result.ToArray();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
List<UnityEngine.Object> result = new List<Object>(100);
|
||||||
|
AssetInfo[] allAssetInfos = AssetSystem.BundleServices.GetAssetInfos(_bundleName);
|
||||||
|
foreach (var assetInfo in allAssetInfos)
|
||||||
|
{
|
||||||
|
var assetObject = UnityEditor.AssetDatabase.LoadAssetAtPath(assetInfo.AssetPath, AssetType);
|
||||||
|
if (assetObject != null)
|
||||||
|
{
|
||||||
|
if (AssetType.IsAssignableFrom(assetObject.GetType()))
|
||||||
|
result.Add(assetObject);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
YooLogger.Warning($"Failed to load asset : {assetInfo.AssetPath}");
|
||||||
|
loadFailed = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (loadFailed == false)
|
||||||
|
AllAssetObjects = result.ToArray();
|
||||||
|
}
|
||||||
|
Status = EStatus.Checking;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 检测加载结果
|
||||||
|
if (Status == EStatus.Checking)
|
||||||
|
{
|
||||||
|
Status = AllAssetObjects == null ? EStatus.Fail : EStatus.Success;
|
||||||
|
if (Status == EStatus.Fail)
|
||||||
|
{
|
||||||
|
LastError = $"Failed to load all assets : {nameof(AssetType)} in bundle {_bundleName}";
|
||||||
|
YooLogger.Error(LastError);
|
||||||
|
}
|
||||||
|
InvokeCompletion();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b418b6a8da0e3d240b1566cc44fc4b2b
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -39,10 +39,8 @@ namespace YooAsset
|
||||||
InvokeCompletion();
|
InvokeCompletion();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
Status = EStatus.Loading;
|
||||||
Status = EStatus.Loading;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 注意:模拟异步加载效果提前返回
|
// 注意:模拟异步加载效果提前返回
|
||||||
if (IsWaitForAsyncComplete == false)
|
if (IsWaitForAsyncComplete == false)
|
||||||
|
@ -52,7 +50,10 @@ namespace YooAsset
|
||||||
// 1. 加载资源对象
|
// 1. 加载资源对象
|
||||||
if (Status == EStatus.Loading)
|
if (Status == EStatus.Loading)
|
||||||
{
|
{
|
||||||
AssetObject = UnityEditor.AssetDatabase.LoadAssetAtPath(AssetPath, AssetType);
|
if (AssetType == null)
|
||||||
|
AssetObject = UnityEditor.AssetDatabase.LoadMainAssetAtPath(AssetPath);
|
||||||
|
else
|
||||||
|
AssetObject = UnityEditor.AssetDatabase.LoadAssetAtPath(AssetPath, AssetType);
|
||||||
Status = EStatus.Checking;
|
Status = EStatus.Checking;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ namespace YooAsset
|
||||||
Status = SceneObject.IsValid() ? EStatus.Success : EStatus.Fail;
|
Status = SceneObject.IsValid() ? EStatus.Success : EStatus.Fail;
|
||||||
if (Status == EStatus.Fail)
|
if (Status == EStatus.Fail)
|
||||||
{
|
{
|
||||||
LastError = $"The load scene is invalid : {AssetPath}";
|
LastError = $"The loaded scene is invalid : {AssetPath}";
|
||||||
YooLogger.Error(LastError);
|
YooLogger.Error(LastError);
|
||||||
}
|
}
|
||||||
InvokeCompletion();
|
InvokeCompletion();
|
||||||
|
|
|
@ -39,10 +39,8 @@ namespace YooAsset
|
||||||
InvokeCompletion();
|
InvokeCompletion();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
Status = EStatus.Loading;
|
||||||
Status = EStatus.Loading;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 注意:模拟异步加载效果提前返回
|
// 注意:模拟异步加载效果提前返回
|
||||||
if (IsWaitForAsyncComplete == false)
|
if (IsWaitForAsyncComplete == false)
|
||||||
|
@ -62,7 +60,7 @@ namespace YooAsset
|
||||||
List<UnityEngine.Object> result = new List<Object>(findAssets.Length);
|
List<UnityEngine.Object> result = new List<Object>(findAssets.Length);
|
||||||
foreach (var findAsset in findAssets)
|
foreach (var findAsset in findAssets)
|
||||||
{
|
{
|
||||||
if (findAsset.GetType() == AssetType)
|
if (AssetType.IsAssignableFrom(findAsset.GetType()))
|
||||||
result.Add(findAsset);
|
result.Add(findAsset);
|
||||||
}
|
}
|
||||||
AllAssetObjects = result.ToArray();
|
AllAssetObjects = result.ToArray();
|
||||||
|
|
|
@ -140,6 +140,8 @@ namespace YooAsset
|
||||||
handle = new SceneOperationHandle(this);
|
handle = new SceneOperationHandle(this);
|
||||||
else if (IsSubAssetsProvider())
|
else if (IsSubAssetsProvider())
|
||||||
handle = new SubAssetsOperationHandle(this);
|
handle = new SubAssetsOperationHandle(this);
|
||||||
|
else if (IsAllAssetsProvider())
|
||||||
|
handle = new AllAssetsOperationHandle(this);
|
||||||
else
|
else
|
||||||
handle = new AssetOperationHandle(this);
|
handle = new AssetOperationHandle(this);
|
||||||
|
|
||||||
|
@ -162,28 +164,6 @@ namespace YooAsset
|
||||||
RefCount--;
|
RefCount--;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 是否为场景提供者
|
|
||||||
/// </summary>
|
|
||||||
public bool IsSceneProvider()
|
|
||||||
{
|
|
||||||
if (this is BundledSceneProvider || this is DatabaseSceneProvider)
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 是否为子资源对象提供者
|
|
||||||
/// </summary>
|
|
||||||
public bool IsSubAssetsProvider()
|
|
||||||
{
|
|
||||||
if (this is BundledSubAssetsProvider || this is DatabaseSubAssetsProvider)
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 等待异步执行完毕
|
/// 等待异步执行完毕
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -218,6 +198,28 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsSceneProvider()
|
||||||
|
{
|
||||||
|
if (this is BundledSceneProvider || this is DatabaseSceneProvider)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
public bool IsSubAssetsProvider()
|
||||||
|
{
|
||||||
|
if (this is BundledSubAssetsProvider || this is DatabaseSubAssetsProvider)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
public bool IsAllAssetsProvider()
|
||||||
|
{
|
||||||
|
if (this is BundledAllAssetsProvider || this is DatabaseAllAssetsProvider)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
#region 异步编程相关
|
#region 异步编程相关
|
||||||
private TaskCompletionSource<object> _taskCompletionSource;
|
private TaskCompletionSource<object> _taskCompletionSource;
|
||||||
protected void InvokeCompletion()
|
protected void InvokeCompletion()
|
||||||
|
|
|
@ -210,7 +210,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
YooLogger.Warning($"Failed to mapping location to asset path : {location}");
|
YooLogger.Error($"Failed to mapping location to asset path : {location}");
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,9 +56,13 @@ namespace YooAsset
|
||||||
return bundleInfo;
|
return bundleInfo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
AssetInfo[] IBundleServices.GetAssetInfos(string bundleName)
|
||||||
|
{
|
||||||
|
return PatchHelper.GetAssetsInfoByBundleName(_simulatePatchManifest, bundleName);
|
||||||
|
}
|
||||||
AssetInfo[] IBundleServices.GetAssetInfos(string[] tags)
|
AssetInfo[] IBundleServices.GetAssetInfos(string[] tags)
|
||||||
{
|
{
|
||||||
return PatchHelper.GetAssetsInfoByTag(_simulatePatchManifest, tags);
|
return PatchHelper.GetAssetsInfoByTags(_simulatePatchManifest, tags);
|
||||||
}
|
}
|
||||||
string IBundleServices.MappingToAssetPath(string location)
|
string IBundleServices.MappingToAssetPath(string location)
|
||||||
{
|
{
|
||||||
|
|
|
@ -322,9 +322,13 @@ namespace YooAsset
|
||||||
return bundleInfo;
|
return bundleInfo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
AssetInfo[] IBundleServices.GetAssetInfos(string bundleName)
|
||||||
|
{
|
||||||
|
return PatchHelper.GetAssetsInfoByBundleName(LocalPatchManifest, bundleName);
|
||||||
|
}
|
||||||
AssetInfo[] IBundleServices.GetAssetInfos(string[] tags)
|
AssetInfo[] IBundleServices.GetAssetInfos(string[] tags)
|
||||||
{
|
{
|
||||||
return PatchHelper.GetAssetsInfoByTag(LocalPatchManifest, tags);
|
return PatchHelper.GetAssetsInfoByTags(LocalPatchManifest, tags);
|
||||||
}
|
}
|
||||||
string IBundleServices.MappingToAssetPath(string location)
|
string IBundleServices.MappingToAssetPath(string location)
|
||||||
{
|
{
|
||||||
|
|
|
@ -65,9 +65,13 @@ namespace YooAsset
|
||||||
return bundleInfo;
|
return bundleInfo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
AssetInfo[] IBundleServices.GetAssetInfos(string bundleName)
|
||||||
|
{
|
||||||
|
return PatchHelper.GetAssetsInfoByBundleName(_appPatchManifest, bundleName);
|
||||||
|
}
|
||||||
AssetInfo[] IBundleServices.GetAssetInfos(string[] tags)
|
AssetInfo[] IBundleServices.GetAssetInfos(string[] tags)
|
||||||
{
|
{
|
||||||
return PatchHelper.GetAssetsInfoByTag(_appPatchManifest, tags);
|
return PatchHelper.GetAssetsInfoByTags(_appPatchManifest, tags);
|
||||||
}
|
}
|
||||||
string IBundleServices.MappingToAssetPath(string location)
|
string IBundleServices.MappingToAssetPath(string location)
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,6 +8,11 @@ namespace YooAsset
|
||||||
/// </summary>
|
/// </summary>
|
||||||
BundleInfo GetBundleInfo(string bundleName);
|
BundleInfo GetBundleInfo(string bundleName);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取资源信息列表
|
||||||
|
/// </summary>
|
||||||
|
AssetInfo[] GetAssetInfos(string bundleName);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取资源信息列表
|
/// 获取资源信息列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -173,7 +173,7 @@ namespace YooAsset
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取资源信息列表
|
/// 获取资源信息列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static AssetInfo[] GetAssetsInfoByTag(PatchManifest patchManifest, string[] tags)
|
public static AssetInfo[] GetAssetsInfoByTags(PatchManifest patchManifest, string[] tags)
|
||||||
{
|
{
|
||||||
List<AssetInfo> result = new List<AssetInfo>(100);
|
List<AssetInfo> result = new List<AssetInfo>(100);
|
||||||
foreach (var patchAsset in patchManifest.AssetList)
|
foreach (var patchAsset in patchManifest.AssetList)
|
||||||
|
@ -189,5 +189,20 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
return result.ToArray();
|
return result.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取资源信息列表
|
||||||
|
/// </summary>
|
||||||
|
public static AssetInfo[] GetAssetsInfoByBundleName(PatchManifest patchManifest, string bundleName)
|
||||||
|
{
|
||||||
|
List<AssetInfo> result = new List<AssetInfo>(100);
|
||||||
|
foreach (var patchAsset in patchManifest.AssetList)
|
||||||
|
{
|
||||||
|
string tempName = patchManifest.GetBundleName(patchAsset.AssetPath);
|
||||||
|
if (tempName == bundleName)
|
||||||
|
result.Add(new AssetInfo(patchAsset.AssetPath));
|
||||||
|
}
|
||||||
|
return result.ToArray();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -18,7 +18,7 @@ namespace YooAsset
|
||||||
/// 注意:在初始化的时候自动构建真机模拟环境。
|
/// 注意:在初始化的时候自动构建真机模拟环境。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
EditorSimulateMode,
|
EditorSimulateMode,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 离线运行模式
|
/// 离线运行模式
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -368,6 +368,17 @@ namespace YooAsset
|
||||||
return _bundleServices.GetAssetInfos(tags);
|
return _bundleServices.GetAssetInfos(tags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取资源信息列表
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tags">资源标签列表</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static AssetInfo[] GetAssetInfos(string[] tags)
|
||||||
|
{
|
||||||
|
DebugCheckInitialize();
|
||||||
|
return _bundleServices.GetAssetInfos(tags);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取调试信息
|
/// 获取调试信息
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -436,6 +447,37 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static RawFileOperation GetRawFileInternal(string assetPath, string copyPath)
|
||||||
|
{
|
||||||
|
string bundleName = _bundleServices.GetBundleName(assetPath);
|
||||||
|
BundleInfo bundleInfo = _bundleServices.GetBundleInfo(bundleName);
|
||||||
|
|
||||||
|
if (_playMode == EPlayMode.EditorSimulateMode)
|
||||||
|
{
|
||||||
|
RawFileOperation operation = new EditorPlayModeRawFileOperation(bundleInfo, copyPath);
|
||||||
|
OperationSystem.ProcessOperaiton(operation);
|
||||||
|
return operation;
|
||||||
|
}
|
||||||
|
else if (_playMode == EPlayMode.OfflinePlayMode)
|
||||||
|
{
|
||||||
|
RawFileOperation operation = new OfflinePlayModeRawFileOperation(bundleInfo, copyPath);
|
||||||
|
OperationSystem.ProcessOperaiton(operation);
|
||||||
|
return operation;
|
||||||
|
}
|
||||||
|
else if (_playMode == EPlayMode.HostPlayMode)
|
||||||
|
{
|
||||||
|
RawFileOperation operation = new HostPlayModeRawFileOperation(bundleInfo, copyPath);
|
||||||
|
OperationSystem.ProcessOperaiton(operation);
|
||||||
|
return operation;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 资源加载
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 同步加载资源对象
|
/// 同步加载资源对象
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -471,41 +513,6 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 同步加载子资源对象
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="assetInfo">资源信息</param>
|
|
||||||
public static SubAssetsOperationHandle LoadSubAssetsSync(AssetInfo assetInfo)
|
|
||||||
{
|
|
||||||
DebugCheckInitialize();
|
|
||||||
return LoadSubAssetsInternal(assetInfo.AssetPath, assetInfo.AssetType, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 同步加载子资源对象
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TObject">资源类型</typeparam>
|
|
||||||
/// <param name="location">资源的定位地址</param>
|
|
||||||
public static SubAssetsOperationHandle LoadSubAssetsSync<TObject>(string location)
|
|
||||||
{
|
|
||||||
DebugCheckInitialize();
|
|
||||||
string assetPath = _locationServices.ConvertLocationToAssetPath(location);
|
|
||||||
return LoadSubAssetsInternal(assetPath, typeof(TObject), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 同步加载子资源对象
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="location">资源的定位地址</param>
|
|
||||||
/// <param name="type">子对象类型</param>
|
|
||||||
public static SubAssetsOperationHandle LoadSubAssetsSync(string location, System.Type type)
|
|
||||||
{
|
|
||||||
DebugCheckInitialize();
|
|
||||||
string assetPath = _locationServices.ConvertLocationToAssetPath(location);
|
|
||||||
return LoadSubAssetsInternal(assetPath, type, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 异步加载资源对象
|
/// 异步加载资源对象
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -541,6 +548,51 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static AssetOperationHandle LoadAssetInternal(string assetPath, System.Type assetType, bool waitForAsyncComplete)
|
||||||
|
{
|
||||||
|
var handle = AssetSystem.LoadAssetAsync(assetPath, assetType);
|
||||||
|
if (waitForAsyncComplete)
|
||||||
|
handle.WaitForAsyncComplete();
|
||||||
|
return handle;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 资源加载
|
||||||
|
/// <summary>
|
||||||
|
/// 同步加载子资源对象
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="assetInfo">资源信息</param>
|
||||||
|
public static SubAssetsOperationHandle LoadSubAssetsSync(AssetInfo assetInfo)
|
||||||
|
{
|
||||||
|
DebugCheckInitialize();
|
||||||
|
return LoadSubAssetsInternal(assetInfo.AssetPath, assetInfo.AssetType, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 同步加载子资源对象
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TObject">资源类型</typeparam>
|
||||||
|
/// <param name="location">资源的定位地址</param>
|
||||||
|
public static SubAssetsOperationHandle LoadSubAssetsSync<TObject>(string location)
|
||||||
|
{
|
||||||
|
DebugCheckInitialize();
|
||||||
|
string assetPath = _locationServices.ConvertLocationToAssetPath(location);
|
||||||
|
return LoadSubAssetsInternal(assetPath, typeof(TObject), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 同步加载子资源对象
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="location">资源的定位地址</param>
|
||||||
|
/// <param name="type">子对象类型</param>
|
||||||
|
public static SubAssetsOperationHandle LoadSubAssetsSync(string location, System.Type type)
|
||||||
|
{
|
||||||
|
DebugCheckInitialize();
|
||||||
|
string assetPath = _locationServices.ConvertLocationToAssetPath(location);
|
||||||
|
return LoadSubAssetsInternal(assetPath, type, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 异步加载子资源对象
|
/// 异步加载子资源对象
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -576,44 +628,89 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static RawFileOperation GetRawFileInternal(string assetPath, string copyPath)
|
private static SubAssetsOperationHandle LoadSubAssetsInternal(string assetPath, System.Type assetType, bool waitForAsyncComplete)
|
||||||
{
|
{
|
||||||
string bundleName = _bundleServices.GetBundleName(assetPath);
|
var handle = AssetSystem.LoadSubAssetsAsync(assetPath, assetType);
|
||||||
BundleInfo bundleInfo = _bundleServices.GetBundleInfo(bundleName);
|
|
||||||
|
|
||||||
if (_playMode == EPlayMode.EditorSimulateMode)
|
|
||||||
{
|
|
||||||
RawFileOperation operation = new EditorPlayModeRawFileOperation(bundleInfo, copyPath);
|
|
||||||
OperationSystem.ProcessOperaiton(operation);
|
|
||||||
return operation;
|
|
||||||
}
|
|
||||||
else if (_playMode == EPlayMode.OfflinePlayMode)
|
|
||||||
{
|
|
||||||
RawFileOperation operation = new OfflinePlayModeRawFileOperation(bundleInfo, copyPath);
|
|
||||||
OperationSystem.ProcessOperaiton(operation);
|
|
||||||
return operation;
|
|
||||||
}
|
|
||||||
else if (_playMode == EPlayMode.HostPlayMode)
|
|
||||||
{
|
|
||||||
RawFileOperation operation = new HostPlayModeRawFileOperation(bundleInfo, copyPath);
|
|
||||||
OperationSystem.ProcessOperaiton(operation);
|
|
||||||
return operation;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private static AssetOperationHandle LoadAssetInternal(string assetPath, System.Type assetType, bool waitForAsyncComplete)
|
|
||||||
{
|
|
||||||
var handle = AssetSystem.LoadAssetAsync(assetPath, assetType);
|
|
||||||
if (waitForAsyncComplete)
|
if (waitForAsyncComplete)
|
||||||
handle.WaitForAsyncComplete();
|
handle.WaitForAsyncComplete();
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
private static SubAssetsOperationHandle LoadSubAssetsInternal(string assetPath, System.Type assetType, bool waitForAsyncComplete)
|
#endregion
|
||||||
|
|
||||||
|
#region 资源加载
|
||||||
|
/// <summary>
|
||||||
|
/// 同步加载资源对象所属资源包里的所有资源
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="assetInfo">资源信息</param>
|
||||||
|
public static AllAssetsOperationHandle LoadAllAssetsSync(AssetInfo assetInfo)
|
||||||
{
|
{
|
||||||
var handle = AssetSystem.LoadSubAssetsAsync(assetPath, assetType);
|
DebugCheckInitialize();
|
||||||
|
return LoadAllAssetsInternal(assetInfo.AssetPath, assetInfo.AssetType, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 同步加载资源对象所属资源包里的所有资源
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TObject">资源类型</typeparam>
|
||||||
|
/// <param name="location">资源的定位地址</param>
|
||||||
|
public static AllAssetsOperationHandle LoadAllAssetsSync<TObject>(string location)
|
||||||
|
{
|
||||||
|
DebugCheckInitialize();
|
||||||
|
string assetPath = _locationServices.ConvertLocationToAssetPath(location);
|
||||||
|
return LoadAllAssetsInternal(assetPath, typeof(TObject), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 同步加载资源对象所属资源包里的所有资源
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="location">资源的定位地址</param>
|
||||||
|
/// <param name="type">资源类型</param>
|
||||||
|
public static AllAssetsOperationHandle LoadAllAssetsSync(string location, System.Type type)
|
||||||
|
{
|
||||||
|
DebugCheckInitialize();
|
||||||
|
string assetPath = _locationServices.ConvertLocationToAssetPath(location);
|
||||||
|
return LoadAllAssetsInternal(assetPath, type, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 异步加载资源对象所属资源包里的所有资源
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="assetInfo">资源信息</param>
|
||||||
|
public static AllAssetsOperationHandle LoadAllAssetsAsync(AssetInfo assetInfo)
|
||||||
|
{
|
||||||
|
DebugCheckInitialize();
|
||||||
|
return LoadAllAssetsInternal(assetInfo.AssetPath, assetInfo.AssetType, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 异步加载资源对象所属资源包里的所有资源
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TObject">资源类型</typeparam>
|
||||||
|
/// <param name="location">资源的定位地址</param>
|
||||||
|
public static AllAssetsOperationHandle LoadAllAssetsAsync<TObject>(string location)
|
||||||
|
{
|
||||||
|
DebugCheckInitialize();
|
||||||
|
string assetPath = _locationServices.ConvertLocationToAssetPath(location);
|
||||||
|
return LoadAllAssetsInternal(assetPath, typeof(TObject), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 异步加载资源对象所属资源包里的所有资源
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="location">资源的定位地址</param>
|
||||||
|
/// <param name="type">资源类型</param>
|
||||||
|
public static AllAssetsOperationHandle LoadAllAssetsAsync(string location, System.Type type)
|
||||||
|
{
|
||||||
|
DebugCheckInitialize();
|
||||||
|
string assetPath = _locationServices.ConvertLocationToAssetPath(location);
|
||||||
|
return LoadAllAssetsInternal(assetPath, type, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static AllAssetsOperationHandle LoadAllAssetsInternal(string assetPath, System.Type assetType, bool waitForAsyncComplete)
|
||||||
|
{
|
||||||
|
var handle = AssetSystem.LoadAllAssetsAsync(assetPath, assetType);
|
||||||
if (waitForAsyncComplete)
|
if (waitForAsyncComplete)
|
||||||
handle.WaitForAsyncComplete();
|
handle.WaitForAsyncComplete();
|
||||||
return handle;
|
return handle;
|
||||||
|
@ -909,7 +1006,7 @@ namespace YooAsset
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(location))
|
if (string.IsNullOrEmpty(location))
|
||||||
{
|
{
|
||||||
UnityEngine.Debug.LogError("location param is null or empty!");
|
YooLogger.Error("location param is null or empty!");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -918,11 +1015,11 @@ namespace YooAsset
|
||||||
if (index != -1)
|
if (index != -1)
|
||||||
{
|
{
|
||||||
if (location.Length == index + 1)
|
if (location.Length == index + 1)
|
||||||
UnityEngine.Debug.LogWarning($"Found blank character in location : \"{location}\"");
|
YooLogger.Warning($"Found blank character in location : \"{location}\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (location.IndexOfAny(System.IO.Path.GetInvalidPathChars()) >= 0)
|
if (location.IndexOfAny(System.IO.Path.GetInvalidPathChars()) >= 0)
|
||||||
UnityEngine.Debug.LogWarning($"Found illegal character in location : \"{location}\"");
|
YooLogger.Warning($"Found illegal character in location : \"{location}\"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
Loading…
Reference in New Issue