mirror of https://github.com/tuyoogame/YooAsset
Update runtime code
parent
46c219505f
commit
a71921cdd1
|
@ -6,24 +6,26 @@ using UnityEngine.SceneManagement;
|
||||||
|
|
||||||
namespace YooAsset
|
namespace YooAsset
|
||||||
{
|
{
|
||||||
internal static class AssetSystem
|
internal class AssetSystemImpl
|
||||||
{
|
{
|
||||||
private static readonly List<AssetBundleLoaderBase> _loaders = new List<AssetBundleLoaderBase>(1000);
|
private static string SceneRunningPackage = string.Empty;
|
||||||
private static readonly List<ProviderBase> _providers = new List<ProviderBase>(1000);
|
|
||||||
private static readonly Dictionary<string, SceneOperationHandle> _sceneHandles = new Dictionary<string, SceneOperationHandle>(100);
|
|
||||||
private static long _sceneCreateCount = 0;
|
|
||||||
|
|
||||||
private static bool _simulationOnEditor;
|
private readonly List<AssetBundleLoaderBase> _loaders = new List<AssetBundleLoaderBase>(1000);
|
||||||
private static int _loadingMaxNumber;
|
private readonly List<ProviderBase> _providers = new List<ProviderBase>(1000);
|
||||||
public static IDecryptionServices DecryptionServices { private set; get; }
|
private readonly Dictionary<string, SceneOperationHandle> _sceneHandles = new Dictionary<string, SceneOperationHandle>(100);
|
||||||
public static IBundleServices BundleServices { private set; get; }
|
|
||||||
|
private long _sceneCreateCount = 0;
|
||||||
|
private bool _simulationOnEditor;
|
||||||
|
private int _loadingMaxNumber;
|
||||||
|
public IDecryptionServices DecryptionServices { private set; get; }
|
||||||
|
public IBundleServices BundleServices { private set; get; }
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 初始化
|
/// 初始化
|
||||||
/// 注意:在使用AssetSystem之前需要初始化
|
/// 注意:在使用AssetSystem之前需要初始化
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static void Initialize(bool simulationOnEditor, int loadingMaxNumber, IDecryptionServices decryptionServices, IBundleServices bundleServices)
|
public void Initialize(bool simulationOnEditor, int loadingMaxNumber, IDecryptionServices decryptionServices, IBundleServices bundleServices)
|
||||||
{
|
{
|
||||||
_simulationOnEditor = simulationOnEditor;
|
_simulationOnEditor = simulationOnEditor;
|
||||||
_loadingMaxNumber = loadingMaxNumber;
|
_loadingMaxNumber = loadingMaxNumber;
|
||||||
|
@ -34,7 +36,7 @@ namespace YooAsset
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 更新
|
/// 更新
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static void Update()
|
public void Update()
|
||||||
{
|
{
|
||||||
// 更新加载器
|
// 更新加载器
|
||||||
foreach (var loader in _loaders)
|
foreach (var loader in _loaders)
|
||||||
|
@ -67,7 +69,7 @@ namespace YooAsset
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 销毁
|
/// 销毁
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static void DestroyAll()
|
public void DestroyAll()
|
||||||
{
|
{
|
||||||
_loaders.Clear();
|
_loaders.Clear();
|
||||||
_providers.Clear();
|
_providers.Clear();
|
||||||
|
@ -80,7 +82,7 @@ namespace YooAsset
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 资源回收(卸载引用计数为零的资源)
|
/// 资源回收(卸载引用计数为零的资源)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static void UnloadUnusedAssets()
|
public void UnloadUnusedAssets()
|
||||||
{
|
{
|
||||||
if (_simulationOnEditor)
|
if (_simulationOnEditor)
|
||||||
{
|
{
|
||||||
|
@ -115,7 +117,7 @@ namespace YooAsset
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 强制回收所有资源
|
/// 强制回收所有资源
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static void ForceUnloadAllAssets()
|
public void ForceUnloadAllAssets()
|
||||||
{
|
{
|
||||||
foreach (var provider in _providers)
|
foreach (var provider in _providers)
|
||||||
{
|
{
|
||||||
|
@ -136,7 +138,7 @@ namespace YooAsset
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 加载场景
|
/// 加载场景
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static SceneOperationHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode, bool activateOnLoad, int priority)
|
public SceneOperationHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode, bool activateOnLoad, int priority)
|
||||||
{
|
{
|
||||||
if (assetInfo.IsInvalid)
|
if (assetInfo.IsInvalid)
|
||||||
{
|
{
|
||||||
|
@ -145,6 +147,19 @@ namespace YooAsset
|
||||||
return completedProvider.CreateHandle<SceneOperationHandle>();
|
return completedProvider.CreateHandle<SceneOperationHandle>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 注意:场景只允许运行在一个资源包内
|
||||||
|
if (string.IsNullOrEmpty(SceneRunningPackage))
|
||||||
|
{
|
||||||
|
SceneRunningPackage = BundleServices.GetPackageName();
|
||||||
|
}
|
||||||
|
if (BundleServices.GetPackageName() != SceneRunningPackage)
|
||||||
|
{
|
||||||
|
CompletedProvider completedProvider = new CompletedProvider(assetInfo);
|
||||||
|
string error = $"Scene are allowed to running within only {SceneRunningPackage}";
|
||||||
|
completedProvider.SetCompleted(error);
|
||||||
|
return completedProvider.CreateHandle<SceneOperationHandle>();
|
||||||
|
}
|
||||||
|
|
||||||
// 如果加载的是主场景,则卸载所有缓存的场景
|
// 如果加载的是主场景,则卸载所有缓存的场景
|
||||||
if (sceneMode == LoadSceneMode.Single)
|
if (sceneMode == LoadSceneMode.Single)
|
||||||
{
|
{
|
||||||
|
@ -156,9 +171,9 @@ namespace YooAsset
|
||||||
ProviderBase provider;
|
ProviderBase provider;
|
||||||
{
|
{
|
||||||
if (_simulationOnEditor)
|
if (_simulationOnEditor)
|
||||||
provider = new DatabaseSceneProvider(providerGUID, assetInfo, sceneMode, activateOnLoad, priority);
|
provider = new DatabaseSceneProvider(this, providerGUID, assetInfo, sceneMode, activateOnLoad, priority);
|
||||||
else
|
else
|
||||||
provider = new BundledSceneProvider(providerGUID, assetInfo, sceneMode, activateOnLoad, priority);
|
provider = new BundledSceneProvider(this, providerGUID, assetInfo, sceneMode, activateOnLoad, priority);
|
||||||
provider.InitSpawnDebugInfo();
|
provider.InitSpawnDebugInfo();
|
||||||
_providers.Add(provider);
|
_providers.Add(provider);
|
||||||
}
|
}
|
||||||
|
@ -171,7 +186,7 @@ namespace YooAsset
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 加载资源对象
|
/// 加载资源对象
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static AssetOperationHandle LoadAssetAsync(AssetInfo assetInfo)
|
public AssetOperationHandle LoadAssetAsync(AssetInfo assetInfo)
|
||||||
{
|
{
|
||||||
if (assetInfo.IsInvalid)
|
if (assetInfo.IsInvalid)
|
||||||
{
|
{
|
||||||
|
@ -185,9 +200,9 @@ namespace YooAsset
|
||||||
if (provider == null)
|
if (provider == null)
|
||||||
{
|
{
|
||||||
if (_simulationOnEditor)
|
if (_simulationOnEditor)
|
||||||
provider = new DatabaseAssetProvider(providerGUID, assetInfo);
|
provider = new DatabaseAssetProvider(this, providerGUID, assetInfo);
|
||||||
else
|
else
|
||||||
provider = new BundledAssetProvider(providerGUID, assetInfo);
|
provider = new BundledAssetProvider(this, providerGUID, assetInfo);
|
||||||
provider.InitSpawnDebugInfo();
|
provider.InitSpawnDebugInfo();
|
||||||
_providers.Add(provider);
|
_providers.Add(provider);
|
||||||
}
|
}
|
||||||
|
@ -197,7 +212,7 @@ namespace YooAsset
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 加载子资源对象
|
/// 加载子资源对象
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static SubAssetsOperationHandle LoadSubAssetsAsync(AssetInfo assetInfo)
|
public SubAssetsOperationHandle LoadSubAssetsAsync(AssetInfo assetInfo)
|
||||||
{
|
{
|
||||||
if (assetInfo.IsInvalid)
|
if (assetInfo.IsInvalid)
|
||||||
{
|
{
|
||||||
|
@ -211,16 +226,16 @@ namespace YooAsset
|
||||||
if (provider == null)
|
if (provider == null)
|
||||||
{
|
{
|
||||||
if (_simulationOnEditor)
|
if (_simulationOnEditor)
|
||||||
provider = new DatabaseSubAssetsProvider(providerGUID, assetInfo);
|
provider = new DatabaseSubAssetsProvider(this, providerGUID, assetInfo);
|
||||||
else
|
else
|
||||||
provider = new BundledSubAssetsProvider(providerGUID, assetInfo);
|
provider = new BundledSubAssetsProvider(this, providerGUID, assetInfo);
|
||||||
provider.InitSpawnDebugInfo();
|
provider.InitSpawnDebugInfo();
|
||||||
_providers.Add(provider);
|
_providers.Add(provider);
|
||||||
}
|
}
|
||||||
return provider.CreateHandle<SubAssetsOperationHandle>();
|
return provider.CreateHandle<SubAssetsOperationHandle>();
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void UnloadSubScene(ProviderBase provider)
|
internal void UnloadSubScene(ProviderBase provider)
|
||||||
{
|
{
|
||||||
string providerGUID = provider.ProviderGUID;
|
string providerGUID = provider.ProviderGUID;
|
||||||
if (_sceneHandles.ContainsKey(providerGUID) == false)
|
if (_sceneHandles.ContainsKey(providerGUID) == false)
|
||||||
|
@ -231,9 +246,9 @@ namespace YooAsset
|
||||||
_sceneHandles.Remove(providerGUID);
|
_sceneHandles.Remove(providerGUID);
|
||||||
|
|
||||||
// 卸载未被使用的资源(包括场景)
|
// 卸载未被使用的资源(包括场景)
|
||||||
AssetSystem.UnloadUnusedAssets();
|
UnloadUnusedAssets();
|
||||||
}
|
}
|
||||||
internal static void UnloadAllScene()
|
internal void UnloadAllScene()
|
||||||
{
|
{
|
||||||
// 释放所有场景句柄
|
// 释放所有场景句柄
|
||||||
foreach (var valuePair in _sceneHandles)
|
foreach (var valuePair in _sceneHandles)
|
||||||
|
@ -243,15 +258,15 @@ namespace YooAsset
|
||||||
_sceneHandles.Clear();
|
_sceneHandles.Clear();
|
||||||
|
|
||||||
// 卸载未被使用的资源(包括场景)
|
// 卸载未被使用的资源(包括场景)
|
||||||
AssetSystem.UnloadUnusedAssets();
|
UnloadUnusedAssets();
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static AssetBundleLoaderBase CreateOwnerAssetBundleLoader(AssetInfo assetInfo)
|
internal AssetBundleLoaderBase CreateOwnerAssetBundleLoader(AssetInfo assetInfo)
|
||||||
{
|
{
|
||||||
BundleInfo bundleInfo = BundleServices.GetBundleInfo(assetInfo);
|
BundleInfo bundleInfo = BundleServices.GetBundleInfo(assetInfo);
|
||||||
return CreateAssetBundleLoaderInternal(bundleInfo);
|
return CreateAssetBundleLoaderInternal(bundleInfo);
|
||||||
}
|
}
|
||||||
internal static List<AssetBundleLoaderBase> CreateDependAssetBundleLoaders(AssetInfo assetInfo)
|
internal List<AssetBundleLoaderBase> CreateDependAssetBundleLoaders(AssetInfo assetInfo)
|
||||||
{
|
{
|
||||||
BundleInfo[] depends = BundleServices.GetAllDependBundleInfos(assetInfo);
|
BundleInfo[] depends = BundleServices.GetAllDependBundleInfos(assetInfo);
|
||||||
List<AssetBundleLoaderBase> result = new List<AssetBundleLoaderBase>(depends.Length);
|
List<AssetBundleLoaderBase> result = new List<AssetBundleLoaderBase>(depends.Length);
|
||||||
|
@ -262,7 +277,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
internal static void RemoveBundleProviders(List<ProviderBase> providers)
|
internal void RemoveBundleProviders(List<ProviderBase> providers)
|
||||||
{
|
{
|
||||||
foreach (var provider in providers)
|
foreach (var provider in providers)
|
||||||
{
|
{
|
||||||
|
@ -270,7 +285,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static AssetBundleLoaderBase CreateAssetBundleLoaderInternal(BundleInfo bundleInfo)
|
private AssetBundleLoaderBase CreateAssetBundleLoaderInternal(BundleInfo bundleInfo)
|
||||||
{
|
{
|
||||||
// 如果加载器已经存在
|
// 如果加载器已经存在
|
||||||
AssetBundleLoaderBase loader = TryGetAssetBundleLoader(bundleInfo.Bundle.BundleName);
|
AssetBundleLoaderBase loader = TryGetAssetBundleLoader(bundleInfo.Bundle.BundleName);
|
||||||
|
@ -279,15 +294,15 @@ namespace YooAsset
|
||||||
|
|
||||||
// 新增下载需求
|
// 新增下载需求
|
||||||
#if UNITY_WEBGL
|
#if UNITY_WEBGL
|
||||||
loader = new AssetBundleWebLoader(bundleInfo);
|
loader = new AssetBundleWebLoader(this, bundleInfo);
|
||||||
#else
|
#else
|
||||||
loader = new AssetBundleFileLoader(bundleInfo);
|
loader = new AssetBundleFileLoader(this, bundleInfo);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
_loaders.Add(loader);
|
_loaders.Add(loader);
|
||||||
return loader;
|
return loader;
|
||||||
}
|
}
|
||||||
private static AssetBundleLoaderBase TryGetAssetBundleLoader(string bundleName)
|
private AssetBundleLoaderBase TryGetAssetBundleLoader(string bundleName)
|
||||||
{
|
{
|
||||||
AssetBundleLoaderBase loader = null;
|
AssetBundleLoaderBase loader = null;
|
||||||
for (int i = 0; i < _loaders.Count; i++)
|
for (int i = 0; i < _loaders.Count; i++)
|
||||||
|
@ -301,7 +316,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
return loader;
|
return loader;
|
||||||
}
|
}
|
||||||
private static ProviderBase TryGetProvider(string providerGUID)
|
private ProviderBase TryGetProvider(string providerGUID)
|
||||||
{
|
{
|
||||||
ProviderBase provider = null;
|
ProviderBase provider = null;
|
||||||
for (int i = 0; i < _providers.Count; i++)
|
for (int i = 0; i < _providers.Count; i++)
|
||||||
|
@ -316,37 +331,31 @@ namespace YooAsset
|
||||||
return provider;
|
return provider;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region 调试专属方法
|
#region 调试信息
|
||||||
internal static DebugReport GetDebugReport()
|
internal List<DebugProviderInfo> GetDebugReportInfos()
|
||||||
{
|
{
|
||||||
DebugReport report = new DebugReport();
|
List<DebugProviderInfo> result = new List<DebugProviderInfo>(_providers.Count);
|
||||||
report.FrameCount = Time.frameCount;
|
|
||||||
report.BundleCount = _loaders.Count;
|
|
||||||
report.AssetCount = _providers.Count;
|
|
||||||
|
|
||||||
foreach (var provider in _providers)
|
foreach (var provider in _providers)
|
||||||
{
|
{
|
||||||
DebugProviderInfo providerInfo = new DebugProviderInfo();
|
DebugProviderInfo providerInfo = new DebugProviderInfo();
|
||||||
|
providerInfo.PackageName = BundleServices.GetPackageName();
|
||||||
providerInfo.AssetPath = provider.MainAssetInfo.AssetPath;
|
providerInfo.AssetPath = provider.MainAssetInfo.AssetPath;
|
||||||
providerInfo.SpawnScene = provider.SpawnScene;
|
providerInfo.SpawnScene = provider.SpawnScene;
|
||||||
providerInfo.SpawnTime = provider.SpawnTime;
|
providerInfo.SpawnTime = provider.SpawnTime;
|
||||||
providerInfo.RefCount = provider.RefCount;
|
providerInfo.RefCount = provider.RefCount;
|
||||||
providerInfo.Status = (int)provider.Status;
|
providerInfo.Status = (int)provider.Status;
|
||||||
providerInfo.BundleInfos = new List<DebugBundleInfo>();
|
providerInfo.DependBundleInfos = new List<DebugBundleInfo>();
|
||||||
report.ProviderInfos.Add(providerInfo);
|
result.Add(providerInfo);
|
||||||
|
|
||||||
if (provider is BundledProvider)
|
if (provider is BundledProvider)
|
||||||
{
|
{
|
||||||
BundledProvider temp = provider as BundledProvider;
|
BundledProvider temp = provider as BundledProvider;
|
||||||
temp.GetBundleDebugInfos(providerInfo.BundleInfos);
|
temp.GetBundleDebugInfos(providerInfo.DependBundleInfos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return result;
|
||||||
// 重新排序
|
|
||||||
report.ProviderInfos.Sort();
|
|
||||||
return report;
|
|
||||||
}
|
}
|
||||||
internal static List<BundleInfo> GetLoadedBundleInfos()
|
internal List<BundleInfo> GetLoadedBundleInfos()
|
||||||
{
|
{
|
||||||
List<BundleInfo> result = new List<BundleInfo>(100);
|
List<BundleInfo> result = new List<BundleInfo>(100);
|
||||||
foreach (var bundleLoader in _loaders)
|
foreach (var bundleLoader in _loaders)
|
||||||
|
|
|
@ -118,7 +118,7 @@ namespace YooAsset
|
||||||
|
|
||||||
// 卸载子场景
|
// 卸载子场景
|
||||||
Scene sceneObject = SceneObject;
|
Scene sceneObject = SceneObject;
|
||||||
AssetSystem.UnloadSubScene(Provider);
|
Provider.Impl.UnloadSubScene(Provider);
|
||||||
{
|
{
|
||||||
var operation = new UnloadSceneOperation(sceneObject);
|
var operation = new UnloadSceneOperation(sceneObject);
|
||||||
OperationSystem.StartOperation(operation);
|
OperationSystem.StartOperation(operation);
|
||||||
|
|
|
@ -26,7 +26,7 @@ namespace YooAsset
|
||||||
private AssetBundleCreateRequest _createRequest;
|
private AssetBundleCreateRequest _createRequest;
|
||||||
|
|
||||||
|
|
||||||
public AssetBundleFileLoader(BundleInfo bundleInfo) : base(bundleInfo)
|
public AssetBundleFileLoader(AssetSystemImpl impl, BundleInfo bundleInfo) : base(impl, bundleInfo)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,13 +105,13 @@ namespace YooAsset
|
||||||
// Load assetBundle file
|
// Load assetBundle file
|
||||||
if (MainBundleInfo.Bundle.IsEncrypted)
|
if (MainBundleInfo.Bundle.IsEncrypted)
|
||||||
{
|
{
|
||||||
if (AssetSystem.DecryptionServices == null)
|
if (Impl.DecryptionServices == null)
|
||||||
throw new Exception($"{nameof(AssetBundleFileLoader)} need {nameof(IDecryptionServices)} : {MainBundleInfo.Bundle.BundleName}");
|
throw new Exception($"{nameof(AssetBundleFileLoader)} need {nameof(IDecryptionServices)} : {MainBundleInfo.Bundle.BundleName}");
|
||||||
|
|
||||||
DecryptionFileInfo fileInfo = new DecryptionFileInfo();
|
DecryptionFileInfo fileInfo = new DecryptionFileInfo();
|
||||||
fileInfo.BundleName = MainBundleInfo.Bundle.BundleName;
|
fileInfo.BundleName = MainBundleInfo.Bundle.BundleName;
|
||||||
fileInfo.FileHash = MainBundleInfo.Bundle.FileHash;
|
fileInfo.FileHash = MainBundleInfo.Bundle.FileHash;
|
||||||
ulong offset = AssetSystem.DecryptionServices.GetFileOffset(fileInfo);
|
ulong offset = Impl.DecryptionServices.GetFileOffset(fileInfo);
|
||||||
if (_isWaitForAsyncComplete)
|
if (_isWaitForAsyncComplete)
|
||||||
CacheBundle = AssetBundle.LoadFromFile(_fileLoadPath, 0, offset);
|
CacheBundle = AssetBundle.LoadFromFile(_fileLoadPath, 0, offset);
|
||||||
else
|
else
|
||||||
|
|
|
@ -14,6 +14,11 @@ namespace YooAsset
|
||||||
Failed
|
Failed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 所属资源系统
|
||||||
|
/// </summary>
|
||||||
|
public AssetSystemImpl Impl { private set; get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 资源包文件信息
|
/// 资源包文件信息
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -43,8 +48,9 @@ namespace YooAsset
|
||||||
internal AssetBundle CacheBundle { set; get; }
|
internal AssetBundle CacheBundle { set; get; }
|
||||||
|
|
||||||
|
|
||||||
public AssetBundleLoaderBase(BundleInfo bundleInfo)
|
public AssetBundleLoaderBase(AssetSystemImpl impl, BundleInfo bundleInfo)
|
||||||
{
|
{
|
||||||
|
Impl = impl;
|
||||||
MainBundleInfo = bundleInfo;
|
MainBundleInfo = bundleInfo;
|
||||||
RefCount = 0;
|
RefCount = 0;
|
||||||
Status = EStatus.None;
|
Status = EStatus.None;
|
||||||
|
@ -148,7 +154,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
|
|
||||||
// 从列表里移除Providers
|
// 从列表里移除Providers
|
||||||
AssetSystem.RemoveBundleProviders(_providers);
|
Impl.RemoveBundleProviders(_providers);
|
||||||
_providers.Clear();
|
_providers.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ namespace YooAsset
|
||||||
private AssetBundleCreateRequest _createRequest;
|
private AssetBundleCreateRequest _createRequest;
|
||||||
|
|
||||||
|
|
||||||
public AssetBundleWebLoader(BundleInfo bundleInfo) : base(bundleInfo)
|
public AssetBundleWebLoader(AssetSystemImpl impl, BundleInfo bundleInfo) : base(impl, bundleInfo)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,13 +110,13 @@ namespace YooAsset
|
||||||
// Load assetBundle file
|
// Load assetBundle file
|
||||||
if (MainBundleInfo.Bundle.IsEncrypted)
|
if (MainBundleInfo.Bundle.IsEncrypted)
|
||||||
{
|
{
|
||||||
if (AssetSystem.DecryptionServices == null)
|
if (Impl.DecryptionServices == null)
|
||||||
throw new Exception($"{nameof(AssetBundleFileLoader)} need {nameof(IDecryptionServices)} : {MainBundleInfo.Bundle.BundleName}");
|
throw new Exception($"{nameof(AssetBundleFileLoader)} need {nameof(IDecryptionServices)} : {MainBundleInfo.Bundle.BundleName}");
|
||||||
|
|
||||||
DecryptionFileInfo fileInfo = new DecryptionFileInfo();
|
DecryptionFileInfo fileInfo = new DecryptionFileInfo();
|
||||||
fileInfo.BundleName = MainBundleInfo.Bundle.BundleName;
|
fileInfo.BundleName = MainBundleInfo.Bundle.BundleName;
|
||||||
fileInfo.FileHash = MainBundleInfo.Bundle.FileHash;
|
fileInfo.FileHash = MainBundleInfo.Bundle.FileHash;
|
||||||
ulong offset = AssetSystem.DecryptionServices.GetFileOffset(fileInfo);
|
ulong offset = Impl.DecryptionServices.GetFileOffset(fileInfo);
|
||||||
_createRequest = AssetBundle.LoadFromFileAsync(_fileLoadPath, 0, offset);
|
_createRequest = AssetBundle.LoadFromFileAsync(_fileLoadPath, 0, offset);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -17,7 +17,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public BundledAssetProvider(string providerGUID, AssetInfo assetInfo) : base(providerGUID, assetInfo)
|
public BundledAssetProvider(AssetSystemImpl impl, string providerGUID, AssetInfo assetInfo) : base(impl, providerGUID, assetInfo)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
public override void Update()
|
public override void Update()
|
||||||
|
|
|
@ -8,13 +8,13 @@ namespace YooAsset
|
||||||
protected AssetBundleLoaderBase OwnerBundle { private set; get; }
|
protected AssetBundleLoaderBase OwnerBundle { private set; get; }
|
||||||
protected DependAssetBundleGroup DependBundleGroup { private set; get; }
|
protected DependAssetBundleGroup DependBundleGroup { private set; get; }
|
||||||
|
|
||||||
public BundledProvider(string providerGUID, AssetInfo assetInfo) : base(providerGUID, assetInfo)
|
public BundledProvider(AssetSystemImpl impl, string providerGUID, AssetInfo assetInfo) : base(impl, providerGUID, assetInfo)
|
||||||
{
|
{
|
||||||
OwnerBundle = AssetSystem.CreateOwnerAssetBundleLoader(assetInfo);
|
OwnerBundle = impl.CreateOwnerAssetBundleLoader(assetInfo);
|
||||||
OwnerBundle.Reference();
|
OwnerBundle.Reference();
|
||||||
OwnerBundle.AddProvider(this);
|
OwnerBundle.AddProvider(this);
|
||||||
|
|
||||||
var dependBundles = AssetSystem.CreateDependAssetBundleLoaders(assetInfo);
|
var dependBundles = impl.CreateDependAssetBundleLoaders(assetInfo);
|
||||||
DependBundleGroup = new DependAssetBundleGroup(dependBundles);
|
DependBundleGroup = new DependAssetBundleGroup(dependBundles);
|
||||||
DependBundleGroup.Reference();
|
DependBundleGroup.Reference();
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public BundledSceneProvider(string providerGUID, AssetInfo assetInfo, LoadSceneMode sceneMode, bool activateOnLoad, int priority) : base(providerGUID, assetInfo)
|
public BundledSceneProvider(AssetSystemImpl impl, string providerGUID, AssetInfo assetInfo, LoadSceneMode sceneMode, bool activateOnLoad, int priority) : base(impl, providerGUID, assetInfo)
|
||||||
{
|
{
|
||||||
SceneMode = sceneMode;
|
SceneMode = sceneMode;
|
||||||
_sceneName = Path.GetFileNameWithoutExtension(assetInfo.AssetPath);
|
_sceneName = Path.GetFileNameWithoutExtension(assetInfo.AssetPath);
|
||||||
|
|
|
@ -17,7 +17,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public BundledSubAssetsProvider(string providerGUID, AssetInfo assetInfo) : base(providerGUID, assetInfo)
|
public BundledSubAssetsProvider(AssetSystemImpl impl, string providerGUID, AssetInfo assetInfo) : base(impl, providerGUID, assetInfo)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
public override void Update()
|
public override void Update()
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CompletedProvider(AssetInfo assetInfo) : base(string.Empty, assetInfo)
|
public CompletedProvider(AssetInfo assetInfo) : base(null, string.Empty, assetInfo)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
public override void Update()
|
public override void Update()
|
||||||
|
|
|
@ -17,7 +17,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public DatabaseAssetProvider(string providerGUID, AssetInfo assetInfo) : base(providerGUID, assetInfo)
|
public DatabaseAssetProvider(AssetSystemImpl impl, string providerGUID, AssetInfo assetInfo) : base(impl, providerGUID, assetInfo)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
public override void Update()
|
public override void Update()
|
||||||
|
|
|
@ -19,7 +19,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public DatabaseSceneProvider(string providerGUID, AssetInfo assetInfo, LoadSceneMode sceneMode, bool activateOnLoad, int priority) : base(providerGUID, assetInfo)
|
public DatabaseSceneProvider(AssetSystemImpl impl, string providerGUID, AssetInfo assetInfo, LoadSceneMode sceneMode, bool activateOnLoad, int priority) : base(impl, providerGUID, assetInfo)
|
||||||
{
|
{
|
||||||
SceneMode = sceneMode;
|
SceneMode = sceneMode;
|
||||||
_activateOnLoad = activateOnLoad;
|
_activateOnLoad = activateOnLoad;
|
||||||
|
|
|
@ -17,7 +17,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public DatabaseSubAssetsProvider(string providerGUID, AssetInfo assetInfo) : base(providerGUID, assetInfo)
|
public DatabaseSubAssetsProvider(AssetSystemImpl impl, string providerGUID, AssetInfo assetInfo) : base(impl, providerGUID, assetInfo)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
public override void Update()
|
public override void Update()
|
||||||
|
|
|
@ -22,6 +22,11 @@ namespace YooAsset
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string ProviderGUID { private set; get; }
|
public string ProviderGUID { private set; get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 所属资源系统
|
||||||
|
/// </summary>
|
||||||
|
public AssetSystemImpl Impl { private set; get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 资源信息
|
/// 资源信息
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -90,8 +95,9 @@ namespace YooAsset
|
||||||
private readonly List<OperationHandleBase> _handles = new List<OperationHandleBase>();
|
private readonly List<OperationHandleBase> _handles = new List<OperationHandleBase>();
|
||||||
|
|
||||||
|
|
||||||
public ProviderBase(string providerGUID, AssetInfo assetInfo)
|
public ProviderBase(AssetSystemImpl impl, string providerGUID, AssetInfo assetInfo)
|
||||||
{
|
{
|
||||||
|
Impl = impl;
|
||||||
ProviderGUID = providerGUID;
|
ProviderGUID = providerGUID;
|
||||||
MainAssetInfo = assetInfo;
|
MainAssetInfo = assetInfo;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,13 +13,13 @@ namespace YooAsset
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 初始化时的验证级别
|
/// 初始化时的验证级别
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static EVerifyLevel InitVerifyLevel { private set; get; }
|
public static EVerifyLevel InitVerifyLevel { set; get; } = EVerifyLevel.Low;
|
||||||
|
|
||||||
public static void Initialize(EVerifyLevel initVerifyLevel)
|
|
||||||
{
|
/// <summary>
|
||||||
InitVerifyLevel = initVerifyLevel;
|
/// 清空所有数据
|
||||||
}
|
/// </summary>
|
||||||
public static void DestroyAll()
|
public static void ClearAll()
|
||||||
{
|
{
|
||||||
_cachedDic.Clear();
|
_cachedDic.Clear();
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,11 @@ namespace YooAsset
|
||||||
[Serializable]
|
[Serializable]
|
||||||
internal class DebugProviderInfo : IComparer<DebugProviderInfo>, IComparable<DebugProviderInfo>
|
internal class DebugProviderInfo : IComparer<DebugProviderInfo>, IComparable<DebugProviderInfo>
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 所属的资源包裹
|
||||||
|
/// </summary>
|
||||||
|
public string PackageName;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 资源对象路径
|
/// 资源对象路径
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -35,7 +40,7 @@ namespace YooAsset
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 依赖的资源包列表
|
/// 依赖的资源包列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<DebugBundleInfo> BundleInfos;
|
public List<DebugBundleInfo> DependBundleInfos;
|
||||||
|
|
||||||
public int CompareTo(DebugProviderInfo other)
|
public int CompareTo(DebugProviderInfo other)
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,17 +19,6 @@ namespace YooAsset
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int FrameCount;
|
public int FrameCount;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 资源包总数
|
|
||||||
/// </summary>
|
|
||||||
public int BundleCount;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 资源对象总数
|
|
||||||
/// </summary>
|
|
||||||
public int AssetCount;
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 序列化
|
/// 序列化
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -20,7 +20,7 @@ namespace YooAsset
|
||||||
{
|
{
|
||||||
if(UnityEditor.EditorApplication.isPlaying)
|
if(UnityEditor.EditorApplication.isPlaying)
|
||||||
{
|
{
|
||||||
var report = AssetSystem.GetDebugReport();
|
var report = YooAssets.GetDebugReport();
|
||||||
EditorHandleDebugReportCallback?.Invoke(0, report);
|
EditorHandleDebugReportCallback?.Invoke(0, report);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ namespace YooAsset
|
||||||
YooLogger.Log($"On handle remote command : {command.CommandType} Param : {command.CommandParam}");
|
YooLogger.Log($"On handle remote command : {command.CommandType} Param : {command.CommandParam}");
|
||||||
if (command.CommandType == (int)ERemoteCommand.SampleOnce)
|
if (command.CommandType == (int)ERemoteCommand.SampleOnce)
|
||||||
{
|
{
|
||||||
var debugReport = AssetSystem.GetDebugReport();
|
var debugReport = YooAssets.GetDebugReport();
|
||||||
var data = DebugReport.Serialize(debugReport);
|
var data = DebugReport.Serialize(debugReport);
|
||||||
PlayerConnection.instance.Send(RemoteDebuggerDefine.kMsgSendPlayerToEditor, data);
|
PlayerConnection.instance.Send(RemoteDebuggerDefine.kMsgSendPlayerToEditor, data);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,16 +14,11 @@ namespace YooAsset
|
||||||
{
|
{
|
||||||
private static readonly Dictionary<string, DownloaderBase> _downloaderDic = new Dictionary<string, DownloaderBase>();
|
private static readonly Dictionary<string, DownloaderBase> _downloaderDic = new Dictionary<string, DownloaderBase>();
|
||||||
private static readonly List<string> _removeList = new List<string>(100);
|
private static readonly List<string> _removeList = new List<string>(100);
|
||||||
private static int _breakpointResumeFileSize = int.MaxValue;
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 初始化
|
/// 启用断点续传的文件大小
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static void Initialize(int breakpointResumeFileSize)
|
public static int BreakpointResumeFileSize { set; get; } = int.MaxValue;
|
||||||
{
|
|
||||||
_breakpointResumeFileSize = breakpointResumeFileSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 更新所有下载器
|
/// 更新所有下载器
|
||||||
|
@ -59,7 +54,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
_downloaderDic.Clear();
|
_downloaderDic.Clear();
|
||||||
_removeList.Clear();
|
_removeList.Clear();
|
||||||
_breakpointResumeFileSize = int.MaxValue;
|
BreakpointResumeFileSize = int.MaxValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -86,7 +81,7 @@ namespace YooAsset
|
||||||
{
|
{
|
||||||
YooLogger.Log($"Beginning to download file : {bundleInfo.Bundle.FileName} URL : {bundleInfo.RemoteMainURL}");
|
YooLogger.Log($"Beginning to download file : {bundleInfo.Bundle.FileName} URL : {bundleInfo.RemoteMainURL}");
|
||||||
FileUtility.CreateFileDirectory(bundleInfo.Bundle.CachedFilePath);
|
FileUtility.CreateFileDirectory(bundleInfo.Bundle.CachedFilePath);
|
||||||
bool breakDownload = bundleInfo.Bundle.FileSize >= _breakpointResumeFileSize;
|
bool breakDownload = bundleInfo.Bundle.FileSize >= BreakpointResumeFileSize;
|
||||||
DownloaderBase newDownloader = new FileDownloader(bundleInfo, breakDownload);
|
DownloaderBase newDownloader = new FileDownloader(bundleInfo, breakDownload);
|
||||||
newDownloader.SendRequest(failedTryAgain, timeout);
|
newDownloader.SendRequest(failedTryAgain, timeout);
|
||||||
_downloaderDic.Add(bundleInfo.Bundle.CachedFilePath, newDownloader);
|
_downloaderDic.Add(bundleInfo.Bundle.CachedFilePath, newDownloader);
|
||||||
|
|
|
@ -2,6 +2,28 @@
|
||||||
|
|
||||||
namespace YooAsset
|
namespace YooAsset
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 运行模式
|
||||||
|
/// </summary>
|
||||||
|
public enum EPlayMode
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 编辑器下的模拟模式
|
||||||
|
/// 注意:在初始化的时候自动构建真机模拟环境。
|
||||||
|
/// </summary>
|
||||||
|
EditorSimulateMode,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 离线运行模式
|
||||||
|
/// </summary>
|
||||||
|
OfflinePlayMode,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 联机运行模式
|
||||||
|
/// </summary>
|
||||||
|
HostPlayMode,
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 初始化参数
|
/// 初始化参数
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -9,6 +31,7 @@ namespace YooAsset
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 资源定位地址大小写不敏感
|
/// 资源定位地址大小写不敏感
|
||||||
|
/// 注意:默认值为False
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool LocationToLower = false;
|
public bool LocationToLower = false;
|
||||||
|
|
||||||
|
@ -24,13 +47,9 @@ namespace YooAsset
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 资源加载的最大数量
|
/// 资源加载的最大数量
|
||||||
|
/// 注意:默认值为MaxValue
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int AssetLoadingMaxNumber = int.MaxValue;
|
public int AssetLoadingMaxNumber = int.MaxValue;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 异步操作系统每帧允许运行的最大时间切片(单位:毫秒)
|
|
||||||
/// </summary>
|
|
||||||
public long OperationSystemMaxTimeSlice = long.MaxValue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -42,7 +61,7 @@ namespace YooAsset
|
||||||
/// 用于模拟运行的资源清单路径
|
/// 用于模拟运行的资源清单路径
|
||||||
/// 注意:如果路径为空,会自动重新构建补丁清单。
|
/// 注意:如果路径为空,会自动重新构建补丁清单。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string SimulatePatchManifestPath;
|
public string SimulatePatchManifestPath = string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -50,10 +69,6 @@ namespace YooAsset
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class OfflinePlayModeParameters : InitializeParameters
|
public class OfflinePlayModeParameters : InitializeParameters
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// 内置的资源包裹名称
|
|
||||||
/// </summary>
|
|
||||||
public string BuildinPackageName = string.Empty;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -64,29 +79,12 @@ namespace YooAsset
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 默认的资源服务器下载地址
|
/// 默认的资源服务器下载地址
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string DefaultHostServer;
|
public string DefaultHostServer = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 备用的资源服务器下载地址
|
/// 备用的资源服务器下载地址
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string FallbackHostServer;
|
public string FallbackHostServer = string.Empty;
|
||||||
|
|
||||||
#if UNITY_WEBGL
|
|
||||||
/// <summary>
|
|
||||||
/// WEBGL模式不支持多线程下载
|
|
||||||
/// </summary>
|
|
||||||
internal int BreakpointResumeFileSize = int.MaxValue;
|
|
||||||
#else
|
|
||||||
/// <summary>
|
|
||||||
/// 启用断点续传功能的文件大小
|
|
||||||
/// </summary>
|
|
||||||
public int BreakpointResumeFileSize = int.MaxValue;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 下载文件校验等级
|
|
||||||
/// </summary>
|
|
||||||
public EVerifyLevel VerifyLevel = EVerifyLevel.High;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 查询服务类
|
/// 查询服务类
|
||||||
|
|
|
@ -10,9 +10,13 @@ namespace YooAsset
|
||||||
|
|
||||||
// 计时器相关
|
// 计时器相关
|
||||||
private static Stopwatch _watch;
|
private static Stopwatch _watch;
|
||||||
private static long _maxTimeSlice;
|
|
||||||
private static long _frameTime;
|
private static long _frameTime;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 异步操作的最小时间片段
|
||||||
|
/// </summary>
|
||||||
|
public static long MaxTimeSlice { set; get; } = long.MaxValue;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 处理器是否繁忙
|
/// 处理器是否繁忙
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -20,7 +24,7 @@ namespace YooAsset
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return _watch.ElapsedMilliseconds - _frameTime >= _maxTimeSlice;
|
return _watch.ElapsedMilliseconds - _frameTime >= MaxTimeSlice;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,9 +32,8 @@ namespace YooAsset
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 初始化异步操作系统
|
/// 初始化异步操作系统
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static void Initialize(long maxTimeSlice)
|
public static void Initialize()
|
||||||
{
|
{
|
||||||
_maxTimeSlice = maxTimeSlice;
|
|
||||||
_watch = Stopwatch.StartNew();
|
_watch = Stopwatch.StartNew();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,8 +66,8 @@ namespace YooAsset
|
||||||
{
|
{
|
||||||
_operations.Clear();
|
_operations.Clear();
|
||||||
_watch = null;
|
_watch = null;
|
||||||
_maxTimeSlice = 0;
|
|
||||||
_frameTime = 0;
|
_frameTime = 0;
|
||||||
|
MaxTimeSlice = long.MaxValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -1,111 +0,0 @@
|
||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using UnityEngine;
|
|
||||||
|
|
||||||
namespace YooAsset
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 清理未使用的缓存资源操作类
|
|
||||||
/// </summary>
|
|
||||||
public abstract class ClearUnusedCacheFilesOperation : AsyncOperationBase
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 编辑器模式
|
|
||||||
/// </summary>
|
|
||||||
internal sealed class EditorPlayModeClearUnusedCacheFilesOperation : ClearUnusedCacheFilesOperation
|
|
||||||
{
|
|
||||||
internal override void Start()
|
|
||||||
{
|
|
||||||
Status = EOperationStatus.Succeed;
|
|
||||||
}
|
|
||||||
internal override void Update()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 离线模式
|
|
||||||
/// </summary>
|
|
||||||
internal sealed class OfflinePlayModeClearUnusedCacheFilesOperation : ClearUnusedCacheFilesOperation
|
|
||||||
{
|
|
||||||
internal override void Start()
|
|
||||||
{
|
|
||||||
Status = EOperationStatus.Succeed;
|
|
||||||
}
|
|
||||||
internal override void Update()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 联机模式
|
|
||||||
/// </summary>
|
|
||||||
internal sealed class HostPlayModeClearUnusedCacheFilesOperation : ClearUnusedCacheFilesOperation
|
|
||||||
{
|
|
||||||
private enum ESteps
|
|
||||||
{
|
|
||||||
None,
|
|
||||||
GetUnusedCacheFiles,
|
|
||||||
ClearUnusedCacheFiles,
|
|
||||||
Done,
|
|
||||||
}
|
|
||||||
|
|
||||||
private ESteps _steps = ESteps.None;
|
|
||||||
private List<string> _unusedCacheFilePaths;
|
|
||||||
private int _unusedFileTotalCount = 0;
|
|
||||||
private HostPlayModeImpl _impl;
|
|
||||||
|
|
||||||
internal HostPlayModeClearUnusedCacheFilesOperation(HostPlayModeImpl impl)
|
|
||||||
{
|
|
||||||
_impl = impl;
|
|
||||||
}
|
|
||||||
internal override void Start()
|
|
||||||
{
|
|
||||||
_steps = ESteps.GetUnusedCacheFiles;
|
|
||||||
}
|
|
||||||
internal override void Update()
|
|
||||||
{
|
|
||||||
if (_steps == ESteps.None || _steps == ESteps.Done)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (_steps == ESteps.GetUnusedCacheFiles)
|
|
||||||
{
|
|
||||||
_unusedCacheFilePaths = _impl.ClearUnusedCacheFilePaths();
|
|
||||||
_unusedFileTotalCount = _unusedCacheFilePaths.Count;
|
|
||||||
YooLogger.Log($"Found unused cache file count : {_unusedFileTotalCount}");
|
|
||||||
_steps = ESteps.ClearUnusedCacheFiles;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_steps == ESteps.ClearUnusedCacheFiles)
|
|
||||||
{
|
|
||||||
for (int i = _unusedCacheFilePaths.Count - 1; i >= 0; i--)
|
|
||||||
{
|
|
||||||
string filePath = _unusedCacheFilePaths[i];
|
|
||||||
if (File.Exists(filePath))
|
|
||||||
{
|
|
||||||
YooLogger.Log($"Delete unused cache file : {filePath}");
|
|
||||||
File.Delete(filePath);
|
|
||||||
}
|
|
||||||
_unusedCacheFilePaths.RemoveAt(i);
|
|
||||||
|
|
||||||
if (OperationSystem.IsBusy)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_unusedFileTotalCount == 0)
|
|
||||||
Progress = 1.0f;
|
|
||||||
else
|
|
||||||
Progress = 1.0f - (_unusedCacheFilePaths.Count / _unusedFileTotalCount);
|
|
||||||
|
|
||||||
if (_unusedCacheFilePaths.Count == 0)
|
|
||||||
{
|
|
||||||
_steps = ESteps.Done;
|
|
||||||
Status = EOperationStatus.Succeed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -20,7 +20,6 @@ namespace YooAsset
|
||||||
private enum ESteps
|
private enum ESteps
|
||||||
{
|
{
|
||||||
None,
|
None,
|
||||||
Builder,
|
|
||||||
Load,
|
Load,
|
||||||
Done,
|
Done,
|
||||||
}
|
}
|
||||||
|
@ -36,26 +35,10 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
internal override void Start()
|
internal override void Start()
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(_simulatePatchManifestPath))
|
|
||||||
_steps = ESteps.Builder;
|
|
||||||
else
|
|
||||||
_steps = ESteps.Load;
|
_steps = ESteps.Load;
|
||||||
}
|
}
|
||||||
internal override void Update()
|
internal override void Update()
|
||||||
{
|
{
|
||||||
if (_steps == ESteps.Builder)
|
|
||||||
{
|
|
||||||
_simulatePatchManifestPath = EditorSimulateModeHelper.SimulateBuild();
|
|
||||||
if (string.IsNullOrEmpty(_simulatePatchManifestPath))
|
|
||||||
{
|
|
||||||
_steps = ESteps.Done;
|
|
||||||
Status = EOperationStatus.Failed;
|
|
||||||
Error = "Simulate build failed, see the detail info on the console window.";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_steps = ESteps.Load;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_steps == ESteps.Load)
|
if (_steps == ESteps.Load)
|
||||||
{
|
{
|
||||||
if (File.Exists(_simulatePatchManifestPath) == false)
|
if (File.Exists(_simulatePatchManifestPath) == false)
|
||||||
|
|
|
@ -3,20 +3,22 @@ using System.Reflection;
|
||||||
|
|
||||||
namespace YooAsset
|
namespace YooAsset
|
||||||
{
|
{
|
||||||
internal static class EditorSimulateModeHelper
|
public static class EditorSimulateModeHelper
|
||||||
{
|
{
|
||||||
private static System.Type _classType;
|
private static System.Type _classType;
|
||||||
|
|
||||||
public static string SimulateBuild()
|
/// <summary>
|
||||||
|
/// 编辑器下模拟构建补丁清单
|
||||||
|
/// </summary>
|
||||||
|
public static string SimulateBuild(string packageName, bool enableAddressable)
|
||||||
{
|
{
|
||||||
|
if (_classType == null)
|
||||||
_classType = Assembly.Load("YooAsset.Editor").GetType("YooAsset.Editor.AssetBundleSimulateBuilder");
|
_classType = Assembly.Load("YooAsset.Editor").GetType("YooAsset.Editor.AssetBundleSimulateBuilder");
|
||||||
InvokePublicStaticMethod(_classType, "SimulateBuild");
|
|
||||||
return GetPatchManifestFilePath();
|
string manifestFilePath = (string)InvokePublicStaticMethod(_classType, "SimulateBuild", packageName, enableAddressable);
|
||||||
}
|
return manifestFilePath;
|
||||||
private static string GetPatchManifestFilePath()
|
|
||||||
{
|
|
||||||
return (string)InvokePublicStaticMethod(_classType, "GetPatchManifestPath");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static object InvokePublicStaticMethod(System.Type type, string method, params object[] parameters)
|
private static object InvokePublicStaticMethod(System.Type type, string method, params object[] parameters)
|
||||||
{
|
{
|
||||||
var methodInfo = type.GetMethod(method, BindingFlags.Public | BindingFlags.Static);
|
var methodInfo = type.GetMethod(method, BindingFlags.Public | BindingFlags.Static);
|
||||||
|
@ -30,8 +32,14 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
internal static class EditorSimulateModeHelper
|
namespace YooAsset
|
||||||
{
|
{
|
||||||
public static string SimulateBuild() { throw new System.Exception("Only support in unity editor !"); }
|
public static class EditorSimulateModeHelper
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 编辑器下模拟构建补丁清单
|
||||||
|
/// </summary>
|
||||||
|
public static string SimulateBuild(string packageName, bool enableAddressable) { throw new System.Exception("Only support in unity editor !"); }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
|
@ -57,6 +57,10 @@ namespace YooAsset
|
||||||
{
|
{
|
||||||
return _simulatePatchManifest.MappingToAssetPath(location);
|
return _simulatePatchManifest.MappingToAssetPath(location);
|
||||||
}
|
}
|
||||||
|
string IBundleServices.GetPackageName()
|
||||||
|
{
|
||||||
|
return _simulatePatchManifest.PackageName;
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -71,35 +71,6 @@ namespace YooAsset
|
||||||
return operation;
|
return operation;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取未被使用的缓存文件路径集合
|
|
||||||
/// </summary>
|
|
||||||
public List<string> ClearUnusedCacheFilePaths()
|
|
||||||
{
|
|
||||||
string cacheFolderPath = SandboxHelper.GetCacheFolderPath();
|
|
||||||
if (Directory.Exists(cacheFolderPath) == false)
|
|
||||||
return new List<string>();
|
|
||||||
|
|
||||||
DirectoryInfo directoryInfo = new DirectoryInfo(cacheFolderPath);
|
|
||||||
FileInfo[] fileInfos = directoryInfo.GetFiles();
|
|
||||||
List<string> result = new List<string>(fileInfos.Length);
|
|
||||||
foreach (FileInfo fileInfo in fileInfos)
|
|
||||||
{
|
|
||||||
bool used = false;
|
|
||||||
foreach (var patchBundle in LocalPatchManifest.BundleList)
|
|
||||||
{
|
|
||||||
if (fileInfo.Name == patchBundle.FileName)
|
|
||||||
{
|
|
||||||
used = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (used == false)
|
|
||||||
result.Add(fileInfo.FullName);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 创建下载器
|
/// 创建下载器
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -379,6 +350,10 @@ namespace YooAsset
|
||||||
{
|
{
|
||||||
return LocalPatchManifest.MappingToAssetPath(location);
|
return LocalPatchManifest.MappingToAssetPath(location);
|
||||||
}
|
}
|
||||||
|
string IBundleServices.GetPackageName()
|
||||||
|
{
|
||||||
|
return LocalPatchManifest.PackageName;
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -85,6 +85,10 @@ namespace YooAsset
|
||||||
{
|
{
|
||||||
return _appPatchManifest.MappingToAssetPath(location);
|
return _appPatchManifest.MappingToAssetPath(location);
|
||||||
}
|
}
|
||||||
|
string IBundleServices.GetPackageName()
|
||||||
|
{
|
||||||
|
return _appPatchManifest.PackageName;
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -27,5 +27,10 @@ namespace YooAsset
|
||||||
/// 映射为资源路径
|
/// 映射为资源路径
|
||||||
/// </summary>
|
/// </summary>
|
||||||
string MappingToAssetPath(string location);
|
string MappingToAssetPath(string location);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取所属的包裹名
|
||||||
|
/// </summary>
|
||||||
|
string GetPackageName();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -6,6 +6,6 @@ namespace YooAsset
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 定位地址转换为资源路径
|
/// 定位地址转换为资源路径
|
||||||
/// </summary>
|
/// </summary>
|
||||||
string ConvertLocationToAssetPath(string location);
|
string ConvertLocationToAssetPath(YooAssetPackage package, string location);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -3,9 +3,9 @@ namespace YooAsset
|
||||||
{
|
{
|
||||||
public class AddressLocationServices : ILocationServices
|
public class AddressLocationServices : ILocationServices
|
||||||
{
|
{
|
||||||
string ILocationServices.ConvertLocationToAssetPath(string location)
|
string ILocationServices.ConvertLocationToAssetPath(YooAssetPackage package, string location)
|
||||||
{
|
{
|
||||||
return YooAssets.MappingToAssetPath(location);
|
return package.MappingToAssetPath(location);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -11,16 +11,16 @@ namespace YooAsset
|
||||||
_resourceRoot = PathHelper.GetRegularPath(resourceRoot);
|
_resourceRoot = PathHelper.GetRegularPath(resourceRoot);
|
||||||
}
|
}
|
||||||
|
|
||||||
string ILocationServices.ConvertLocationToAssetPath(string location)
|
string ILocationServices.ConvertLocationToAssetPath(YooAssetPackage package, string location)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(_resourceRoot))
|
if (string.IsNullOrEmpty(_resourceRoot))
|
||||||
{
|
{
|
||||||
return YooAssets.MappingToAssetPath(location);
|
return package.MappingToAssetPath(location);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
string tempLocation = $"{_resourceRoot}/{location}";
|
string tempLocation = $"{_resourceRoot}/{location}";
|
||||||
return YooAssets.MappingToAssetPath(tempLocation);
|
return package.MappingToAssetPath(tempLocation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,40 +6,23 @@ using UnityEngine.SceneManagement;
|
||||||
|
|
||||||
namespace YooAsset
|
namespace YooAsset
|
||||||
{
|
{
|
||||||
public class YooAssetComponent
|
public class YooAssetPackage
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// 运行模式
|
|
||||||
/// </summary>
|
|
||||||
public enum EPlayMode
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 编辑器下的模拟模式
|
|
||||||
/// 注意:在初始化的时候自动构建真机模拟环境。
|
|
||||||
/// </summary>
|
|
||||||
EditorSimulateMode,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 离线运行模式
|
|
||||||
/// </summary>
|
|
||||||
OfflinePlayMode,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 联机运行模式
|
|
||||||
/// </summary>
|
|
||||||
HostPlayMode,
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool _isInitialize = false;
|
private bool _isInitialize = false;
|
||||||
private string _initializeError = string.Empty;
|
private string _initializeError = string.Empty;
|
||||||
private EOperationStatus _initializeStatus = EOperationStatus.None;
|
private EOperationStatus _initializeStatus = EOperationStatus.None;
|
||||||
private EPlayMode _playMode;
|
private EPlayMode _playMode;
|
||||||
private IBundleServices _bundleServices;
|
private IBundleServices _bundleServices;
|
||||||
private ILocationServices _locationServices;
|
private ILocationServices _locationServices;
|
||||||
|
private AssetSystemImpl _assetSystemImpl;
|
||||||
private EditorSimulateModeImpl _editorSimulateModeImpl;
|
private EditorSimulateModeImpl _editorSimulateModeImpl;
|
||||||
private OfflinePlayModeImpl _offlinePlayModeImpl;
|
private OfflinePlayModeImpl _offlinePlayModeImpl;
|
||||||
private HostPlayModeImpl _hostPlayModeImpl;
|
private HostPlayModeImpl _hostPlayModeImpl;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 包裹名
|
||||||
|
/// </summary>
|
||||||
|
public string PackageName { private set; get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否已经初始化
|
/// 是否已经初始化
|
||||||
|
@ -49,19 +32,141 @@ namespace YooAsset
|
||||||
get { return _isInitialize; }
|
get { return _isInitialize; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 拒绝外部实例化
|
||||||
|
/// </summary>
|
||||||
|
internal YooAssetPackage()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
internal YooAssetPackage(string packageName)
|
||||||
|
{
|
||||||
|
PackageName = packageName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 更新资源包裹
|
||||||
|
/// </summary>
|
||||||
|
internal void UpdatePackage()
|
||||||
|
{
|
||||||
|
if (_assetSystemImpl != null)
|
||||||
|
_assetSystemImpl.Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 销毁资源包裹
|
||||||
|
/// </summary>
|
||||||
|
internal void DestroyPackage()
|
||||||
|
{
|
||||||
|
if (_isInitialize)
|
||||||
|
{
|
||||||
|
_isInitialize = false;
|
||||||
|
_initializeError = string.Empty;
|
||||||
|
_initializeStatus = EOperationStatus.None;
|
||||||
|
|
||||||
|
_bundleServices = null;
|
||||||
|
_locationServices = null;
|
||||||
|
_editorSimulateModeImpl = null;
|
||||||
|
_offlinePlayModeImpl = null;
|
||||||
|
_hostPlayModeImpl = null;
|
||||||
|
|
||||||
|
if (_assetSystemImpl != null)
|
||||||
|
{
|
||||||
|
_assetSystemImpl.DestroyAll();
|
||||||
|
_assetSystemImpl = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
YooLogger.Log("YooAssets destroy all !");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 异步初始化
|
/// 异步初始化
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public InitializationOperation InitializeAsync(InitializeParameters parameters)
|
public InitializationOperation InitializeAsync(InitializeParameters parameters)
|
||||||
{
|
{
|
||||||
|
// 检测初始化参数合法性
|
||||||
|
CheckInitializeParameters(parameters);
|
||||||
|
|
||||||
|
// 初始化资源系统
|
||||||
|
InitializationOperation initializeOperation;
|
||||||
|
_locationServices = parameters.LocationServices;
|
||||||
|
_assetSystemImpl = new AssetSystemImpl();
|
||||||
|
if (_playMode == EPlayMode.EditorSimulateMode)
|
||||||
|
{
|
||||||
|
_editorSimulateModeImpl = new EditorSimulateModeImpl();
|
||||||
|
_bundleServices = _editorSimulateModeImpl;
|
||||||
|
_assetSystemImpl.Initialize(true, parameters.AssetLoadingMaxNumber, parameters.DecryptionServices, _bundleServices);
|
||||||
|
var initializeParameters = parameters as EditorSimulateModeParameters;
|
||||||
|
initializeOperation = _editorSimulateModeImpl.InitializeAsync(
|
||||||
|
initializeParameters.LocationToLower,
|
||||||
|
initializeParameters.SimulatePatchManifestPath);
|
||||||
|
}
|
||||||
|
else if (_playMode == EPlayMode.OfflinePlayMode)
|
||||||
|
{
|
||||||
|
_offlinePlayModeImpl = new OfflinePlayModeImpl();
|
||||||
|
_bundleServices = _offlinePlayModeImpl;
|
||||||
|
_assetSystemImpl.Initialize(false, parameters.AssetLoadingMaxNumber, parameters.DecryptionServices, _bundleServices);
|
||||||
|
var initializeParameters = parameters as OfflinePlayModeParameters;
|
||||||
|
initializeOperation = _offlinePlayModeImpl.InitializeAsync(
|
||||||
|
initializeParameters.LocationToLower,
|
||||||
|
PackageName);
|
||||||
|
}
|
||||||
|
else if (_playMode == EPlayMode.HostPlayMode)
|
||||||
|
{
|
||||||
|
_hostPlayModeImpl = new HostPlayModeImpl();
|
||||||
|
_bundleServices = _hostPlayModeImpl;
|
||||||
|
_assetSystemImpl.Initialize(false, parameters.AssetLoadingMaxNumber, parameters.DecryptionServices, _bundleServices);
|
||||||
|
var initializeParameters = parameters as HostPlayModeParameters;
|
||||||
|
initializeOperation = _hostPlayModeImpl.InitializeAsync(
|
||||||
|
initializeParameters.LocationToLower,
|
||||||
|
initializeParameters.DefaultHostServer,
|
||||||
|
initializeParameters.FallbackHostServer,
|
||||||
|
initializeParameters.QueryServices);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 监听初始化结果
|
||||||
|
initializeOperation.Completed += InitializeOperation_Completed;
|
||||||
|
return initializeOperation;
|
||||||
|
}
|
||||||
|
private void CheckInitializeParameters(InitializeParameters parameters)
|
||||||
|
{
|
||||||
|
if (_isInitialize)
|
||||||
|
throw new Exception($"{nameof(YooAssetPackage)} is initialized yet.");
|
||||||
|
|
||||||
if (parameters == null)
|
if (parameters == null)
|
||||||
throw new Exception($"YooAsset create parameters is null.");
|
throw new Exception($"{nameof(YooAssetPackage)} create parameters is null.");
|
||||||
|
|
||||||
#if !UNITY_EDITOR
|
#if !UNITY_EDITOR
|
||||||
if (parameters is EditorSimulateModeParameters)
|
if (parameters is EditorSimulateModeParameters)
|
||||||
throw new Exception($"Editor simulate mode only support unity editor.");
|
throw new Exception($"Editor simulate mode only support unity editor.");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (parameters.LocationServices == null)
|
||||||
|
throw new Exception($"{nameof(ILocationServices)} is null.");
|
||||||
|
|
||||||
|
if(parameters is EditorSimulateModeParameters)
|
||||||
|
{
|
||||||
|
var editorSimulateModeParameters = parameters as EditorSimulateModeParameters;
|
||||||
|
if (string.IsNullOrEmpty(editorSimulateModeParameters.SimulatePatchManifestPath))
|
||||||
|
throw new Exception($"${editorSimulateModeParameters.SimulatePatchManifestPath} is null or empty.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parameters is HostPlayModeParameters)
|
||||||
|
{
|
||||||
|
var hostPlayModeParameters = parameters as HostPlayModeParameters;
|
||||||
|
if (string.IsNullOrEmpty(hostPlayModeParameters.DefaultHostServer))
|
||||||
|
throw new Exception($"${hostPlayModeParameters.DefaultHostServer} is null or empty.");
|
||||||
|
if (string.IsNullOrEmpty(hostPlayModeParameters.FallbackHostServer))
|
||||||
|
throw new Exception($"${hostPlayModeParameters.FallbackHostServer} is null or empty.");
|
||||||
|
if (hostPlayModeParameters.QueryServices == null)
|
||||||
|
throw new Exception($"{nameof(IQueryServices)} is null.");
|
||||||
|
}
|
||||||
|
|
||||||
// 鉴定运行模式
|
// 鉴定运行模式
|
||||||
if (parameters is EditorSimulateModeParameters)
|
if (parameters is EditorSimulateModeParameters)
|
||||||
_playMode = EPlayMode.EditorSimulateMode;
|
_playMode = EPlayMode.EditorSimulateMode;
|
||||||
|
@ -72,113 +177,12 @@ namespace YooAsset
|
||||||
else
|
else
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
|
|
||||||
if (parameters.LocationServices == null)
|
|
||||||
throw new Exception($"{nameof(IBundleServices)} is null.");
|
|
||||||
|
|
||||||
if (_playMode == EPlayMode.OfflinePlayMode)
|
|
||||||
{
|
|
||||||
var playModeParameters = parameters as OfflinePlayModeParameters;
|
|
||||||
if (string.IsNullOrEmpty(playModeParameters.BuildinPackageName))
|
|
||||||
throw new Exception($"{nameof(playModeParameters.BuildinPackageName)} is empty.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_playMode == EPlayMode.HostPlayMode)
|
|
||||||
{
|
|
||||||
var playModeParameters = parameters as HostPlayModeParameters;
|
|
||||||
if (playModeParameters.QueryServices == null)
|
|
||||||
throw new Exception($"{nameof(IQueryServices)} is null.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_isInitialize)
|
|
||||||
{
|
|
||||||
throw new Exception("YooAsset is initialized yet.");
|
|
||||||
}
|
|
||||||
|
|
||||||
_locationServices = parameters.LocationServices;
|
|
||||||
|
|
||||||
// 检测参数范围
|
// 检测参数范围
|
||||||
if (parameters.AssetLoadingMaxNumber < 1)
|
if (parameters.AssetLoadingMaxNumber < 1)
|
||||||
{
|
{
|
||||||
parameters.AssetLoadingMaxNumber = 1;
|
parameters.AssetLoadingMaxNumber = 1;
|
||||||
YooLogger.Warning($"{nameof(parameters.AssetLoadingMaxNumber)} minimum value is 1");
|
YooLogger.Warning($"{nameof(parameters.AssetLoadingMaxNumber)} minimum value is 1");
|
||||||
}
|
}
|
||||||
if (parameters.OperationSystemMaxTimeSlice < 30)
|
|
||||||
{
|
|
||||||
parameters.OperationSystemMaxTimeSlice = 30;
|
|
||||||
YooLogger.Warning($"{nameof(parameters.OperationSystemMaxTimeSlice)} minimum value is 30 milliseconds");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 创建驱动器
|
|
||||||
if (_isInitialize == false)
|
|
||||||
{
|
|
||||||
_isInitialize = true;
|
|
||||||
UnityEngine.GameObject driverGo = new UnityEngine.GameObject("[YooAsset]");
|
|
||||||
driverGo.AddComponent<YooAssetDriver>();
|
|
||||||
UnityEngine.Object.DontDestroyOnLoad(driverGo);
|
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
driverGo.AddComponent<RemoteDebuggerInRuntime>();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
// 初始化异步系统
|
|
||||||
OperationSystem.Initialize(parameters.OperationSystemMaxTimeSlice);
|
|
||||||
|
|
||||||
// 初始化下载系统
|
|
||||||
if (_playMode == EPlayMode.HostPlayMode)
|
|
||||||
{
|
|
||||||
var hostPlayModeParameters = parameters as HostPlayModeParameters;
|
|
||||||
CacheSystem.Initialize(hostPlayModeParameters.VerifyLevel);
|
|
||||||
DownloadSystem.Initialize(hostPlayModeParameters.BreakpointResumeFileSize);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
CacheSystem.Initialize(EVerifyLevel.Low);
|
|
||||||
DownloadSystem.Initialize(int.MaxValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 初始化资源系统
|
|
||||||
InitializationOperation initializeOperation;
|
|
||||||
if (_playMode == EPlayMode.EditorSimulateMode)
|
|
||||||
{
|
|
||||||
_editorSimulateModeImpl = new EditorSimulateModeImpl();
|
|
||||||
_bundleServices = _editorSimulateModeImpl;
|
|
||||||
AssetSystem.Initialize(true, parameters.AssetLoadingMaxNumber, parameters.DecryptionServices, _bundleServices);
|
|
||||||
var simulateModeParameters = parameters as EditorSimulateModeParameters;
|
|
||||||
initializeOperation = _editorSimulateModeImpl.InitializeAsync(
|
|
||||||
simulateModeParameters.LocationToLower,
|
|
||||||
simulateModeParameters.SimulatePatchManifestPath);
|
|
||||||
}
|
|
||||||
else if (_playMode == EPlayMode.OfflinePlayMode)
|
|
||||||
{
|
|
||||||
_offlinePlayModeImpl = new OfflinePlayModeImpl();
|
|
||||||
_bundleServices = _offlinePlayModeImpl;
|
|
||||||
AssetSystem.Initialize(false, parameters.AssetLoadingMaxNumber, parameters.DecryptionServices, _bundleServices);
|
|
||||||
var playModeParameters = parameters as OfflinePlayModeParameters;
|
|
||||||
initializeOperation = _offlinePlayModeImpl.InitializeAsync(
|
|
||||||
playModeParameters.LocationToLower,
|
|
||||||
playModeParameters.BuildinPackageName);
|
|
||||||
}
|
|
||||||
else if (_playMode == EPlayMode.HostPlayMode)
|
|
||||||
{
|
|
||||||
_hostPlayModeImpl = new HostPlayModeImpl();
|
|
||||||
_bundleServices = _hostPlayModeImpl;
|
|
||||||
AssetSystem.Initialize(false, parameters.AssetLoadingMaxNumber, parameters.DecryptionServices, _bundleServices);
|
|
||||||
var playModeParameters = parameters as HostPlayModeParameters;
|
|
||||||
initializeOperation = _hostPlayModeImpl.InitializeAsync(
|
|
||||||
playModeParameters.LocationToLower,
|
|
||||||
playModeParameters.DefaultHostServer,
|
|
||||||
playModeParameters.FallbackHostServer,
|
|
||||||
playModeParameters.QueryServices);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 监听初始化结果
|
|
||||||
initializeOperation.Completed += InitializeOperation_Completed;
|
|
||||||
return initializeOperation;
|
|
||||||
}
|
}
|
||||||
private void InitializeOperation_Completed(AsyncOperationBase op)
|
private void InitializeOperation_Completed(AsyncOperationBase op)
|
||||||
{
|
{
|
||||||
|
@ -189,9 +193,8 @@ namespace YooAsset
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 向网络端请求静态资源版本
|
/// 向网络端请求静态资源版本
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="packageName">更新的资源包裹名称</param>
|
|
||||||
/// <param name="timeout">超时时间(默认值:60秒)</param>
|
/// <param name="timeout">超时时间(默认值:60秒)</param>
|
||||||
public UpdateStaticVersionOperation UpdateStaticVersionAsync(string packageName, int timeout = 60)
|
public UpdateStaticVersionOperation UpdateStaticVersionAsync(int timeout = 60)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
DebugCheckInitialize();
|
||||||
if (_playMode == EPlayMode.EditorSimulateMode)
|
if (_playMode == EPlayMode.EditorSimulateMode)
|
||||||
|
@ -208,7 +211,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
else if (_playMode == EPlayMode.HostPlayMode)
|
else if (_playMode == EPlayMode.HostPlayMode)
|
||||||
{
|
{
|
||||||
return _hostPlayModeImpl.UpdateStaticVersionAsync(packageName, timeout);
|
return _hostPlayModeImpl.UpdateStaticVersionAsync(PackageName, timeout);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -219,10 +222,9 @@ namespace YooAsset
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 向网络端请求并更新补丁清单
|
/// 向网络端请求并更新补丁清单
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="packageName">更新的资源包裹名称</param>
|
|
||||||
/// <param name="packageCRC">更新的资源包裹版本</param>
|
/// <param name="packageCRC">更新的资源包裹版本</param>
|
||||||
/// <param name="timeout">超时时间(默认值:60秒)</param>
|
/// <param name="timeout">超时时间(默认值:60秒)</param>
|
||||||
public UpdateManifestOperation UpdateManifestAsync(string packageName, string packageCRC, int timeout = 60)
|
public UpdateManifestOperation UpdateManifestAsync(string packageCRC, int timeout = 60)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
DebugCheckInitialize();
|
||||||
DebugCheckUpdateManifest();
|
DebugCheckUpdateManifest();
|
||||||
|
@ -240,7 +242,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
else if (_playMode == EPlayMode.HostPlayMode)
|
else if (_playMode == EPlayMode.HostPlayMode)
|
||||||
{
|
{
|
||||||
return _hostPlayModeImpl.UpdatePatchManifestAsync(packageName, packageCRC, timeout);
|
return _hostPlayModeImpl.UpdatePatchManifestAsync(PackageName, packageCRC, timeout);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -252,9 +254,8 @@ namespace YooAsset
|
||||||
/// 弱联网情况下加载补丁清单
|
/// 弱联网情况下加载补丁清单
|
||||||
/// 注意:当指定版本内容验证失败后会返回失败。
|
/// 注意:当指定版本内容验证失败后会返回失败。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="packageName">指定的资源包裹名称</param>
|
|
||||||
/// <param name="packageCRC">指定的资源包裹版本</param>
|
/// <param name="packageCRC">指定的资源包裹版本</param>
|
||||||
public UpdateManifestOperation WeaklyUpdateManifestAsync(string packageName, string packageCRC)
|
public UpdateManifestOperation WeaklyUpdateManifestAsync(string packageCRC)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
DebugCheckInitialize();
|
||||||
if (_playMode == EPlayMode.EditorSimulateMode)
|
if (_playMode == EPlayMode.EditorSimulateMode)
|
||||||
|
@ -271,7 +272,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
else if (_playMode == EPlayMode.HostPlayMode)
|
else if (_playMode == EPlayMode.HostPlayMode)
|
||||||
{
|
{
|
||||||
return _hostPlayModeImpl.WeaklyUpdatePatchManifestAsync(packageName, packageCRC);
|
return _hostPlayModeImpl.WeaklyUpdatePatchManifestAsync(PackageName, packageCRC);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -279,15 +280,6 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 开启一个异步操作
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="operation">异步操作对象</param>
|
|
||||||
public void StartOperation(GameAsyncOperation operation)
|
|
||||||
{
|
|
||||||
OperationSystem.StartOperation(operation);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 资源回收(卸载引用计数为零的资源)
|
/// 资源回收(卸载引用计数为零的资源)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -295,8 +287,8 @@ namespace YooAsset
|
||||||
{
|
{
|
||||||
if (_isInitialize)
|
if (_isInitialize)
|
||||||
{
|
{
|
||||||
AssetSystem.Update();
|
_assetSystemImpl.Update();
|
||||||
AssetSystem.UnloadUnusedAssets();
|
_assetSystemImpl.UnloadUnusedAssets();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -307,7 +299,7 @@ namespace YooAsset
|
||||||
{
|
{
|
||||||
if (_isInitialize)
|
if (_isInitialize)
|
||||||
{
|
{
|
||||||
AssetSystem.ForceUnloadAllAssets();
|
_assetSystemImpl.ForceUnloadAllAssets();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -391,7 +383,7 @@ namespace YooAsset
|
||||||
public string GetAssetPath(string location)
|
public string GetAssetPath(string location)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
DebugCheckInitialize();
|
||||||
return _locationServices.ConvertLocationToAssetPath(location);
|
return _locationServices.ConvertLocationToAssetPath(this, location);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -481,7 +473,7 @@ namespace YooAsset
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
DebugCheckInitialize();
|
||||||
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null);
|
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null);
|
||||||
var handle = AssetSystem.LoadSceneAsync(assetInfo, sceneMode, activateOnLoad, priority);
|
var handle = _assetSystemImpl.LoadSceneAsync(assetInfo, sceneMode, activateOnLoad, priority);
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -497,7 +489,7 @@ namespace YooAsset
|
||||||
DebugCheckInitialize();
|
DebugCheckInitialize();
|
||||||
if (assetInfo.IsInvalid)
|
if (assetInfo.IsInvalid)
|
||||||
YooLogger.Warning(assetInfo.Error);
|
YooLogger.Warning(assetInfo.Error);
|
||||||
var handle = AssetSystem.LoadSceneAsync(assetInfo, sceneMode, activateOnLoad, priority);
|
var handle = _assetSystemImpl.LoadSceneAsync(assetInfo, sceneMode, activateOnLoad, priority);
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -591,7 +583,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
var handle = AssetSystem.LoadAssetAsync(assetInfo);
|
var handle = _assetSystemImpl.LoadAssetAsync(assetInfo);
|
||||||
if (waitForAsyncComplete)
|
if (waitForAsyncComplete)
|
||||||
handle.WaitForAsyncComplete();
|
handle.WaitForAsyncComplete();
|
||||||
return handle;
|
return handle;
|
||||||
|
@ -687,7 +679,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
var handle = AssetSystem.LoadSubAssetsAsync(assetInfo);
|
var handle = _assetSystemImpl.LoadSubAssetsAsync(assetInfo);
|
||||||
if (waitForAsyncComplete)
|
if (waitForAsyncComplete)
|
||||||
handle.WaitForAsyncComplete();
|
handle.WaitForAsyncComplete();
|
||||||
return handle;
|
return handle;
|
||||||
|
@ -893,10 +885,9 @@ namespace YooAsset
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 创建资源包裹下载器,用于下载更新指定资源版本所有的资源包文件
|
/// 创建资源包裹下载器,用于下载更新指定资源版本所有的资源包文件
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="packageName">指定更新的资源包裹名称</param>
|
|
||||||
/// <param name="packageCRC">指定更新的资源包裹版本</param>
|
/// <param name="packageCRC">指定更新的资源包裹版本</param>
|
||||||
/// <param name="timeout">超时时间</param>
|
/// <param name="timeout">超时时间</param>
|
||||||
public UpdatePackageOperation UpdatePackageAsync(string packageName, string packageCRC, int timeout = 60)
|
public UpdatePackageOperation UpdatePackageAsync(string packageCRC, int timeout = 60)
|
||||||
{
|
{
|
||||||
DebugCheckInitialize();
|
DebugCheckInitialize();
|
||||||
if (_playMode == EPlayMode.EditorSimulateMode)
|
if (_playMode == EPlayMode.EditorSimulateMode)
|
||||||
|
@ -913,63 +904,7 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
else if (_playMode == EPlayMode.HostPlayMode)
|
else if (_playMode == EPlayMode.HostPlayMode)
|
||||||
{
|
{
|
||||||
return _hostPlayModeImpl.UpdatePackageAsync(packageName, packageCRC, timeout);
|
return _hostPlayModeImpl.UpdatePackageAsync(PackageName, packageCRC, timeout);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region 沙盒相关
|
|
||||||
/// <summary>
|
|
||||||
/// 获取沙盒的根路径
|
|
||||||
/// </summary>
|
|
||||||
public string GetSandboxRoot()
|
|
||||||
{
|
|
||||||
return PathHelper.MakePersistentRootPath();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 清空沙盒目录
|
|
||||||
/// </summary>
|
|
||||||
public void ClearSandbox()
|
|
||||||
{
|
|
||||||
SandboxHelper.DeleteSandbox();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 清空所有的缓存文件
|
|
||||||
/// </summary>
|
|
||||||
public void ClearAllCacheFiles()
|
|
||||||
{
|
|
||||||
SandboxHelper.DeleteCacheFolder();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 清空未被使用的缓存文件
|
|
||||||
/// </summary>
|
|
||||||
public ClearUnusedCacheFilesOperation ClearUnusedCacheFiles()
|
|
||||||
{
|
|
||||||
DebugCheckInitialize();
|
|
||||||
if (_playMode == EPlayMode.EditorSimulateMode)
|
|
||||||
{
|
|
||||||
var operation = new EditorPlayModeClearUnusedCacheFilesOperation();
|
|
||||||
OperationSystem.StartOperation(operation);
|
|
||||||
return operation;
|
|
||||||
}
|
|
||||||
else if (_playMode == EPlayMode.OfflinePlayMode)
|
|
||||||
{
|
|
||||||
var operation = new OfflinePlayModeClearUnusedCacheFilesOperation();
|
|
||||||
OperationSystem.StartOperation(operation);
|
|
||||||
return operation;
|
|
||||||
}
|
|
||||||
else if (_playMode == EPlayMode.HostPlayMode)
|
|
||||||
{
|
|
||||||
var operation = new HostPlayModeClearUnusedCacheFilesOperation(_hostPlayModeImpl);
|
|
||||||
OperationSystem.StartOperation(operation);
|
|
||||||
return operation;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -979,34 +914,6 @@ namespace YooAsset
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 内部方法
|
#region 内部方法
|
||||||
internal void InternalDestroy()
|
|
||||||
{
|
|
||||||
if (_isInitialize)
|
|
||||||
{
|
|
||||||
_isInitialize = false;
|
|
||||||
_initializeError = string.Empty;
|
|
||||||
_initializeStatus = EOperationStatus.None;
|
|
||||||
|
|
||||||
_bundleServices = null;
|
|
||||||
_locationServices = null;
|
|
||||||
_editorSimulateModeImpl = null;
|
|
||||||
_offlinePlayModeImpl = null;
|
|
||||||
_hostPlayModeImpl = null;
|
|
||||||
|
|
||||||
OperationSystem.DestroyAll();
|
|
||||||
DownloadSystem.DestroyAll();
|
|
||||||
CacheSystem.DestroyAll();
|
|
||||||
AssetSystem.DestroyAll();
|
|
||||||
YooLogger.Log("YooAssets destroy all !");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
internal void InternalUpdate()
|
|
||||||
{
|
|
||||||
OperationSystem.Update();
|
|
||||||
DownloadSystem.Update();
|
|
||||||
AssetSystem.Update();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 资源定位地址转换为资源完整路径
|
/// 资源定位地址转换为资源完整路径
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1047,7 +954,7 @@ namespace YooAsset
|
||||||
[Conditional("DEBUG")]
|
[Conditional("DEBUG")]
|
||||||
private void DebugCheckUpdateManifest()
|
private void DebugCheckUpdateManifest()
|
||||||
{
|
{
|
||||||
var loadedBundleInfos = AssetSystem.GetLoadedBundleInfos();
|
var loadedBundleInfos = _assetSystemImpl.GetLoadedBundleInfos();
|
||||||
if (loadedBundleInfos.Count > 0)
|
if (loadedBundleInfos.Count > 0)
|
||||||
{
|
{
|
||||||
YooLogger.Warning($"Found loaded bundle before update manifest ! Recommended to call the {nameof(ForceUnloadAllAssets)} method to release loaded bundle !");
|
YooLogger.Warning($"Found loaded bundle before update manifest ! Recommended to call the {nameof(ForceUnloadAllAssets)} method to release loaded bundle !");
|
||||||
|
@ -1055,6 +962,13 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region 调试信息
|
||||||
|
internal List<DebugProviderInfo> GetDebugReportInfos()
|
||||||
|
{
|
||||||
|
return _assetSystemImpl.GetDebugReportInfos();
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region 私有方法
|
#region 私有方法
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 资源定位地址转换为资源信息类,失败时内部会发出错误日志。
|
/// 资源定位地址转换为资源信息类,失败时内部会发出错误日志。
|
||||||
|
@ -1063,7 +977,7 @@ namespace YooAsset
|
||||||
private AssetInfo ConvertLocationToAssetInfo(string location, System.Type assetType)
|
private AssetInfo ConvertLocationToAssetInfo(string location, System.Type assetType)
|
||||||
{
|
{
|
||||||
DebugCheckLocation(location);
|
DebugCheckLocation(location);
|
||||||
string assetPath = _locationServices.ConvertLocationToAssetPath(location);
|
string assetPath = _locationServices.ConvertLocationToAssetPath(this, location);
|
||||||
PatchAsset patchAsset = _bundleServices.TryGetPatchAsset(assetPath);
|
PatchAsset patchAsset = _bundleServices.TryGetPatchAsset(assetPath);
|
||||||
if (patchAsset != null)
|
if (patchAsset != null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,17 +6,17 @@ namespace YooAsset
|
||||||
{
|
{
|
||||||
void Update()
|
void Update()
|
||||||
{
|
{
|
||||||
YooAssets.InternalUpdate();
|
YooAssets.Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnDestroy()
|
void OnDestroy()
|
||||||
{
|
{
|
||||||
YooAssets.InternalDestroy();
|
YooAssets.Destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnApplicationQuit()
|
void OnApplicationQuit()
|
||||||
{
|
{
|
||||||
YooAssets.InternalDestroy();
|
YooAssets.Destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,409 @@
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine.SceneManagement;
|
||||||
|
|
||||||
|
namespace YooAsset
|
||||||
|
{
|
||||||
|
public static partial class YooAssets
|
||||||
|
{
|
||||||
|
private static YooAssetPackage _mainPackage;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否已经初始化
|
||||||
|
/// </summary>
|
||||||
|
public static bool IsInitialized
|
||||||
|
{
|
||||||
|
get { return _mainPackage.IsInitialized; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 异步初始化
|
||||||
|
/// </summary>
|
||||||
|
public static InitializationOperation InitializeAsync(string packageName, InitializeParameters parameters)
|
||||||
|
{
|
||||||
|
if (_mainPackage != null)
|
||||||
|
throw new Exception("Main package is initialized yet.");
|
||||||
|
|
||||||
|
_mainPackage = CreateAssetPackage(packageName);
|
||||||
|
return _mainPackage.InitializeAsync(parameters);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 向网络端请求静态资源版本
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="timeout">超时时间(默认值:60秒)</param>
|
||||||
|
public static UpdateStaticVersionOperation UpdateStaticVersionAsync(int timeout = 60)
|
||||||
|
{
|
||||||
|
return _mainPackage.UpdateStaticVersionAsync(timeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 向网络端请求并更新补丁清单
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="packageCRC">更新的资源包裹版本</param>
|
||||||
|
/// <param name="timeout">超时时间(默认值:60秒)</param>
|
||||||
|
public static UpdateManifestOperation UpdateManifestAsync(string packageCRC, int timeout = 60)
|
||||||
|
{
|
||||||
|
return _mainPackage.UpdateManifestAsync(packageCRC, timeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 弱联网情况下加载补丁清单
|
||||||
|
/// 注意:当指定版本内容验证失败后会返回失败。
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="packageCRC">指定的资源包裹版本</param>
|
||||||
|
public static UpdateManifestOperation WeaklyUpdateManifestAsync(string packageCRC)
|
||||||
|
{
|
||||||
|
return _mainPackage.WeaklyUpdateManifestAsync(packageCRC);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 资源回收(卸载引用计数为零的资源)
|
||||||
|
/// </summary>
|
||||||
|
public static void UnloadUnusedAssets()
|
||||||
|
{
|
||||||
|
_mainPackage.UnloadUnusedAssets();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 强制回收所有资源
|
||||||
|
/// </summary>
|
||||||
|
public static void ForceUnloadAllAssets()
|
||||||
|
{
|
||||||
|
_mainPackage.ForceUnloadAllAssets();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#region 资源信息
|
||||||
|
/// <summary>
|
||||||
|
/// 是否需要从远端更新下载
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="location">资源的定位地址</param>
|
||||||
|
public static bool IsNeedDownloadFromRemote(string location)
|
||||||
|
{
|
||||||
|
return _mainPackage.IsNeedDownloadFromRemote(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否需要从远端更新下载
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="location">资源的定位地址</param>
|
||||||
|
public static bool IsNeedDownloadFromRemote(AssetInfo assetInfo)
|
||||||
|
{
|
||||||
|
return _mainPackage.IsNeedDownloadFromRemote(assetInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取资源信息列表
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tag">资源标签</param>
|
||||||
|
public static AssetInfo[] GetAssetInfos(string tag)
|
||||||
|
{
|
||||||
|
return _mainPackage.GetAssetInfos(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取资源信息列表
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tags">资源标签列表</param>
|
||||||
|
public static AssetInfo[] GetAssetInfos(string[] tags)
|
||||||
|
{
|
||||||
|
return _mainPackage.GetAssetInfos(tags);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取资源信息
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="location">资源的定位地址</param>
|
||||||
|
public static AssetInfo GetAssetInfo(string location)
|
||||||
|
{
|
||||||
|
return _mainPackage.GetAssetInfo(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取资源路径
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="location">资源的定位地址</param>
|
||||||
|
/// <returns>如果location地址无效,则返回空字符串</returns>
|
||||||
|
public static string GetAssetPath(string location)
|
||||||
|
{
|
||||||
|
return _mainPackage.GetAssetPath(location);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 原生文件
|
||||||
|
/// <summary>
|
||||||
|
/// 异步获取原生文件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="location">资源的定位地址</param>
|
||||||
|
/// <param name="copyPath">拷贝路径</param>
|
||||||
|
public static RawFileOperation GetRawFileAsync(string location, string copyPath = null)
|
||||||
|
{
|
||||||
|
return _mainPackage.GetRawFileAsync(location, copyPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 异步获取原生文件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="assetInfo">资源信息</param>
|
||||||
|
/// <param name="copyPath">拷贝路径</param>
|
||||||
|
public static RawFileOperation GetRawFileAsync(AssetInfo assetInfo, string copyPath = null)
|
||||||
|
{
|
||||||
|
return _mainPackage.GetRawFileAsync(assetInfo, copyPath);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 场景加载
|
||||||
|
/// <summary>
|
||||||
|
/// 异步加载场景
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="location">场景的定位地址</param>
|
||||||
|
/// <param name="sceneMode">场景加载模式</param>
|
||||||
|
/// <param name="activateOnLoad">加载完毕时是否主动激活</param>
|
||||||
|
/// <param name="priority">优先级</param>
|
||||||
|
public static SceneOperationHandle LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, bool activateOnLoad = true, int priority = 100)
|
||||||
|
{
|
||||||
|
return _mainPackage.LoadSceneAsync(location, sceneMode, activateOnLoad, priority);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 异步加载场景
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="assetInfo">场景的资源信息</param>
|
||||||
|
/// <param name="sceneMode">场景加载模式</param>
|
||||||
|
/// <param name="activateOnLoad">加载完毕时是否主动激活</param>
|
||||||
|
/// <param name="priority">优先级</param>
|
||||||
|
public static SceneOperationHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single, bool activateOnLoad = true, int priority = 100)
|
||||||
|
{
|
||||||
|
return _mainPackage.LoadSceneAsync(assetInfo, sceneMode, activateOnLoad, priority);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 资源加载
|
||||||
|
/// <summary>
|
||||||
|
/// 同步加载资源对象
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="assetInfo">资源信息</param>
|
||||||
|
public static AssetOperationHandle LoadAssetSync(AssetInfo assetInfo)
|
||||||
|
{
|
||||||
|
return _mainPackage.LoadAssetSync(assetInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 同步加载资源对象
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TObject">资源类型</typeparam>
|
||||||
|
/// <param name="location">资源的定位地址</param>
|
||||||
|
public static AssetOperationHandle LoadAssetSync<TObject>(string location) where TObject : UnityEngine.Object
|
||||||
|
{
|
||||||
|
return _mainPackage.LoadAssetSync<TObject>(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 同步加载资源对象
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="location">资源的定位地址</param>
|
||||||
|
/// <param name="type">资源类型</param>
|
||||||
|
public static AssetOperationHandle LoadAssetSync(string location, System.Type type)
|
||||||
|
{
|
||||||
|
return _mainPackage.LoadAssetSync(location, type);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 异步加载资源对象
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="assetInfo">资源信息</param>
|
||||||
|
public static AssetOperationHandle LoadAssetAsync(AssetInfo assetInfo)
|
||||||
|
{
|
||||||
|
return _mainPackage.LoadAssetAsync(assetInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 异步加载资源对象
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TObject">资源类型</typeparam>
|
||||||
|
/// <param name="location">资源的定位地址</param>
|
||||||
|
public static AssetOperationHandle LoadAssetAsync<TObject>(string location) where TObject : UnityEngine.Object
|
||||||
|
{
|
||||||
|
return _mainPackage.LoadAssetAsync<TObject>(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 异步加载资源对象
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="location">资源的定位地址</param>
|
||||||
|
/// <param name="type">资源类型</param>
|
||||||
|
public static AssetOperationHandle LoadAssetAsync(string location, System.Type type)
|
||||||
|
{
|
||||||
|
return _mainPackage.LoadAssetAsync(location, type);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 资源加载
|
||||||
|
/// <summary>
|
||||||
|
/// 同步加载子资源对象
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="assetInfo">资源信息</param>
|
||||||
|
public static SubAssetsOperationHandle LoadSubAssetsSync(AssetInfo assetInfo)
|
||||||
|
{
|
||||||
|
return _mainPackage.LoadSubAssetsSync(assetInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 同步加载子资源对象
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TObject">资源类型</typeparam>
|
||||||
|
/// <param name="location">资源的定位地址</param>
|
||||||
|
public static SubAssetsOperationHandle LoadSubAssetsSync<TObject>(string location) where TObject : UnityEngine.Object
|
||||||
|
{
|
||||||
|
return _mainPackage.LoadSubAssetsSync<TObject>(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 同步加载子资源对象
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="location">资源的定位地址</param>
|
||||||
|
/// <param name="type">子对象类型</param>
|
||||||
|
public static SubAssetsOperationHandle LoadSubAssetsSync(string location, System.Type type)
|
||||||
|
{
|
||||||
|
return _mainPackage.LoadSubAssetsSync(location, type);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 异步加载子资源对象
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="assetInfo">资源信息</param>
|
||||||
|
public static SubAssetsOperationHandle LoadSubAssetsAsync(AssetInfo assetInfo)
|
||||||
|
{
|
||||||
|
return _mainPackage.LoadSubAssetsAsync(assetInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 异步加载子资源对象
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TObject">资源类型</typeparam>
|
||||||
|
/// <param name="location">资源的定位地址</param>
|
||||||
|
public static SubAssetsOperationHandle LoadSubAssetsAsync<TObject>(string location) where TObject : UnityEngine.Object
|
||||||
|
{
|
||||||
|
return _mainPackage.LoadSubAssetsAsync<TObject>(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 异步加载子资源对象
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="location">资源的定位地址</param>
|
||||||
|
/// <param name="type">子对象类型</param>
|
||||||
|
public static SubAssetsOperationHandle LoadSubAssetsAsync(string location, System.Type type)
|
||||||
|
{
|
||||||
|
return _mainPackage.LoadSubAssetsAsync(location, type);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 资源下载
|
||||||
|
/// <summary>
|
||||||
|
/// 创建补丁下载器,用于下载更新资源标签指定的资源包文件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tag">资源标签</param>
|
||||||
|
/// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
|
||||||
|
/// <param name="failedTryAgain">下载失败的重试次数</param>
|
||||||
|
public static PatchDownloaderOperation CreatePatchDownloader(string tag, int downloadingMaxNumber, int failedTryAgain)
|
||||||
|
{
|
||||||
|
return _mainPackage.CreatePatchDownloader(new string[] { tag }, downloadingMaxNumber, failedTryAgain);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 创建补丁下载器,用于下载更新资源标签指定的资源包文件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tags">资源标签列表</param>
|
||||||
|
/// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
|
||||||
|
/// <param name="failedTryAgain">下载失败的重试次数</param>
|
||||||
|
public static PatchDownloaderOperation CreatePatchDownloader(string[] tags, int downloadingMaxNumber, int failedTryAgain)
|
||||||
|
{
|
||||||
|
return _mainPackage.CreatePatchDownloader(tags, downloadingMaxNumber, failedTryAgain);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 创建补丁下载器,用于下载更新当前资源版本所有的资源包文件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
|
||||||
|
/// <param name="failedTryAgain">下载失败的重试次数</param>
|
||||||
|
public static PatchDownloaderOperation CreatePatchDownloader(int downloadingMaxNumber, int failedTryAgain)
|
||||||
|
{
|
||||||
|
return _mainPackage.CreatePatchDownloader(downloadingMaxNumber, failedTryAgain);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 创建补丁下载器,用于下载更新指定的资源列表依赖的资源包文件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="locations">资源定位列表</param>
|
||||||
|
/// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
|
||||||
|
/// <param name="failedTryAgain">下载失败的重试次数</param>
|
||||||
|
public static PatchDownloaderOperation CreateBundleDownloader(string[] locations, int downloadingMaxNumber, int failedTryAgain)
|
||||||
|
{
|
||||||
|
return _mainPackage.CreateBundleDownloader(locations, downloadingMaxNumber, failedTryAgain);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 创建补丁下载器,用于下载更新指定的资源列表依赖的资源包文件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="assetInfos">资源信息列表</param>
|
||||||
|
/// <param name="downloadingMaxNumber">同时下载的最大文件数</param>
|
||||||
|
/// <param name="failedTryAgain">下载失败的重试次数</param>
|
||||||
|
public static PatchDownloaderOperation CreateBundleDownloader(AssetInfo[] assetInfos, int downloadingMaxNumber, int failedTryAgain)
|
||||||
|
{
|
||||||
|
return _mainPackage.CreateBundleDownloader(assetInfos, downloadingMaxNumber, failedTryAgain);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 资源解压
|
||||||
|
/// <summary>
|
||||||
|
/// 创建补丁解压器
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tag">资源标签</param>
|
||||||
|
/// <param name="unpackingMaxNumber">同时解压的最大文件数</param>
|
||||||
|
/// <param name="failedTryAgain">解压失败的重试次数</param>
|
||||||
|
public static PatchUnpackerOperation CreatePatchUnpacker(string tag, int unpackingMaxNumber, int failedTryAgain)
|
||||||
|
{
|
||||||
|
return _mainPackage.CreatePatchUnpacker(tag, unpackingMaxNumber, failedTryAgain);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 创建补丁解压器
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tags">资源标签列表</param>
|
||||||
|
/// <param name="unpackingMaxNumber">同时解压的最大文件数</param>
|
||||||
|
/// <param name="failedTryAgain">解压失败的重试次数</param>
|
||||||
|
public static PatchUnpackerOperation CreatePatchUnpacker(string[] tags, int unpackingMaxNumber, int failedTryAgain)
|
||||||
|
{
|
||||||
|
return _mainPackage.CreatePatchUnpacker(tags, unpackingMaxNumber, failedTryAgain);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 创建补丁解压器
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="unpackingMaxNumber">同时解压的最大文件数</param>
|
||||||
|
/// <param name="failedTryAgain">解压失败的重试次数</param>
|
||||||
|
public static PatchUnpackerOperation CreatePatchUnpacker(int unpackingMaxNumber, int failedTryAgain)
|
||||||
|
{
|
||||||
|
return _mainPackage.CreatePatchUnpacker(unpackingMaxNumber, failedTryAgain);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 包裹更新
|
||||||
|
/// <summary>
|
||||||
|
/// 创建资源包裹下载器,用于下载更新指定资源版本所有的资源包文件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="packageCRC">指定更新的资源包裹版本</param>
|
||||||
|
/// <param name="timeout">超时时间</param>
|
||||||
|
public static UpdatePackageOperation UpdatePackageAsync(string packageCRC, int timeout = 60)
|
||||||
|
{
|
||||||
|
return _mainPackage.UpdatePackageAsync(packageCRC, timeout);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 5d188c50fd00bf941b2eeebb374dc0d1
|
guid: 2db868c2aaaee8e42a7f035117e747c4
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
Loading…
Reference in New Issue