AlicizaX/Client/Packages/com.alicizax.unity.resource/Runtime/Resource/ResourceManager.Initialization.cs

124 lines
5.7 KiB
C#
Raw Normal View History

2025-02-06 17:59:35 +08:00
using System;
using UnityEngine;
using YooAsset;
2025-01-23 19:06:48 +08:00
namespace AlicizaX.Resource.Runtime
{
internal partial class ResourceManager
{
/// <summary>
/// 根据运行模式创建初始化操作数据
/// </summary>
/// <returns></returns>
2025-02-06 17:59:35 +08:00
private InitializationOperation CreateInitializationOperationHandler(ResourcePackage resourcePackage, string hostServerURL, string fallbackHostServerURL, string decryptionServicesName)
2025-01-23 19:06:48 +08:00
{
2025-02-06 17:59:35 +08:00
IDecryptionServices decryptionServices = CreateDecryptionServices(decryptionServicesName);
2025-01-23 19:06:48 +08:00
switch (PlayMode)
{
case EPlayMode.EditorSimulateMode:
{
// 编辑器下的模拟模式
return InitializeYooAssetEditorSimulateMode(resourcePackage, DefaultPackageName);
}
case EPlayMode.OfflinePlayMode:
{
// 单机运行模式
2025-02-06 17:59:35 +08:00
return InitializeYooAssetOfflinePlayMode(resourcePackage, decryptionServices);
2025-01-23 19:06:48 +08:00
}
case EPlayMode.HostPlayMode:
{
// 联机运行模式
2025-02-06 17:59:35 +08:00
return InitializeYooAssetHostPlayMode(resourcePackage, hostServerURL, fallbackHostServerURL, decryptionServices);
2025-01-23 19:06:48 +08:00
}
case EPlayMode.WebPlayMode:
{
// WebGL运行模式
return InitializeYooAssetWebPlayMode(resourcePackage, hostServerURL, fallbackHostServerURL);
}
default:
{
return null;
}
}
}
2025-02-06 17:59:35 +08:00
private IDecryptionServices CreateDecryptionServices(string decryptionServicesName)
{
IDecryptionServices decryptionServices = null;
if (string.IsNullOrEmpty(decryptionServicesName))
{
var decryptionServicesType = AlicizaX.Runtime.Utility.Assembly.GetType(decryptionServicesName);
decryptionServices = (IDecryptionServices)Activator.CreateInstance(decryptionServicesType);
}
return decryptionServices;
}
2025-01-23 19:06:48 +08:00
private InitializationOperation InitializeYooAssetEditorSimulateMode(ResourcePackage resourcePackage, string packageName)
{
2025-02-06 17:59:35 +08:00
var buildResult = EditorSimulateModeHelper.SimulateBuild(packageName);
var packageRoot = buildResult.PackageRootDirectory;
var createParameters = new EditorSimulateModeParameters();
createParameters.EditorFileSystemParameters = FileSystemParameters.CreateDefaultEditorFileSystemParameters(packageRoot);
// createParameters.EditorFileSystemParameters.AddParameter(FileSystemParametersDefine.DECRYPTION_SERVICES,new FileOffsetEncryption());
return resourcePackage.InitializeAsync(createParameters);
2025-01-23 19:06:48 +08:00
}
2025-02-06 17:59:35 +08:00
private InitializationOperation InitializeYooAssetOfflinePlayMode(ResourcePackage resourcePackage, IDecryptionServices decryptionServices = null)
2025-01-23 19:06:48 +08:00
{
2025-02-06 17:59:35 +08:00
var buildinFileSystem = FileSystemParameters.CreateDefaultBuildinFileSystemParameters(decryptionServices);
2025-01-23 19:06:48 +08:00
var initParameters = new OfflinePlayModeParameters();
initParameters.BuildinFileSystemParameters = buildinFileSystem;
return resourcePackage.InitializeAsync(initParameters);
}
private InitializationOperation InitializeYooAssetWebPlayMode(ResourcePackage resourcePackage, string hostServerURL, string fallbackHostServerURL)
{
var initParameters = new WebPlayModeParameters();
FileSystemParameters webFileSystem = null;
2025-01-26 20:55:39 +08:00
#if UNITY_WEBGL
#if ENABLE_DOUYIN_MINI_GAME
2025-01-23 19:06:48 +08:00
// 创建字节小游戏文件系统
if (hostServerURL.IsNullOrWhiteSpace())
{
webFileSystem = ByteGameFileSystemCreater.CreateByteGameFileSystemParameters();
}
else
{
webFileSystem = ByteGameFileSystemCreater.CreateByteGameFileSystemParameters(hostServerURL);
}
#elif ENABLE_WECHAT_MINI_GAME
WeChatWASM.WXBase.PreloadConcurrent(10);
// 创建微信小游戏文件系统
if (hostServerURL.IsNullOrWhiteSpace())
{
webFileSystem = WechatFileSystemCreater.CreateWechatFileSystemParameters();
}
else
{
webFileSystem = WechatFileSystemCreater.CreateWechatPathFileSystemParameters(hostServerURL);
}
#else
// 创建默认WebGL文件系统
webFileSystem = FileSystemParameters.CreateDefaultWebFileSystemParameters();
#endif
#else
2025-02-06 17:59:35 +08:00
webFileSystem = FileSystemParameters.CreateDefaultWebServerFileSystemParameters();
2025-01-23 19:06:48 +08:00
#endif
2025-02-06 17:59:35 +08:00
initParameters.WebServerFileSystemParameters = webFileSystem;
2025-01-23 19:06:48 +08:00
return resourcePackage.InitializeAsync(initParameters);
}
2025-02-06 17:59:35 +08:00
private InitializationOperation InitializeYooAssetHostPlayMode(ResourcePackage resourcePackage, string hostServerURL, string fallbackHostServerURL, IDecryptionServices decryptionServices = null)
2025-01-23 19:06:48 +08:00
{
IRemoteServices remoteServices = new RemoteServices(hostServerURL, fallbackHostServerURL);
var cacheFileSystem = FileSystemParameters.CreateDefaultCacheFileSystemParameters(remoteServices);
2025-02-06 17:59:35 +08:00
var buildinFileSystem = FileSystemParameters.CreateDefaultBuildinFileSystemParameters(decryptionServices);
2025-01-23 19:06:48 +08:00
var initParameters = new HostPlayModeParameters();
initParameters.BuildinFileSystemParameters = buildinFileSystem;
initParameters.CacheFileSystemParameters = cacheFileSystem;
return resourcePackage.InitializeAsync(initParameters);
}
}
2025-01-26 20:55:39 +08:00
}