com.alicizax.unity.framework/Runtime/Resource/Resource/ResourceModule.Initialization.cs
2025-09-05 19:46:30 +08:00

124 lines
5.7 KiB
C#

using System;
using UnityEngine;
using YooAsset;
namespace AlicizaX.Resource.Runtime
{
internal partial class ResourceModule
{
/// <summary>
/// 根据运行模式创建初始化操作数据
/// </summary>
/// <returns></returns>
private InitializationOperation CreateInitializationOperationHandler(ResourcePackage resourcePackage, string hostServerURL, string fallbackHostServerURL, string decryptionServicesName)
{
IDecryptionServices decryptionServices = CreateDecryptionServices(decryptionServicesName);
switch (PlayMode)
{
case EPlayMode.EditorSimulateMode:
{
// 编辑器下的模拟模式
return InitializeYooAssetEditorSimulateMode(resourcePackage, DefaultPackageName);
}
case EPlayMode.OfflinePlayMode:
{
// 单机运行模式
return InitializeYooAssetOfflinePlayMode(resourcePackage, decryptionServices);
}
case EPlayMode.HostPlayMode:
{
// 联机运行模式
return InitializeYooAssetHostPlayMode(resourcePackage, hostServerURL, fallbackHostServerURL, decryptionServices);
}
case EPlayMode.WebPlayMode:
{
// WebGL运行模式
return InitializeYooAssetWebPlayMode(resourcePackage, hostServerURL, fallbackHostServerURL);
}
default:
{
return null;
}
}
}
private IDecryptionServices CreateDecryptionServices(string decryptionServicesName)
{
IDecryptionServices decryptionServices = null;
if (!string.IsNullOrEmpty(decryptionServicesName))
{
var decryptionServicesType = AlicizaX.Utility.Assembly.GetType(decryptionServicesName);
decryptionServices = (IDecryptionServices)Activator.CreateInstance(decryptionServicesType);
}
return decryptionServices;
}
private InitializationOperation InitializeYooAssetEditorSimulateMode(ResourcePackage resourcePackage, string packageName)
{
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);
}
private InitializationOperation InitializeYooAssetOfflinePlayMode(ResourcePackage resourcePackage, IDecryptionServices decryptionServices = null)
{
var buildinFileSystem = FileSystemParameters.CreateDefaultBuildinFileSystemParameters(decryptionServices);
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;
#if UNITY_WEBGL
#if ENABLE_DOUYIN_MINI_GAME
// 创建字节小游戏文件系统
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
webFileSystem = FileSystemParameters.CreateDefaultWebServerFileSystemParameters();
#endif
initParameters.WebServerFileSystemParameters = webFileSystem;
return resourcePackage.InitializeAsync(initParameters);
}
private InitializationOperation InitializeYooAssetHostPlayMode(ResourcePackage resourcePackage, string hostServerURL, string fallbackHostServerURL, IDecryptionServices decryptionServices = null)
{
IRemoteServices remoteServices = new RemoteServices(hostServerURL, fallbackHostServerURL);
var cacheFileSystem = FileSystemParameters.CreateDefaultCacheFileSystemParameters(remoteServices);
var buildinFileSystem = FileSystemParameters.CreateDefaultBuildinFileSystemParameters(decryptionServices);
var initParameters = new HostPlayModeParameters();
initParameters.BuildinFileSystemParameters = buildinFileSystem;
initParameters.CacheFileSystemParameters = cacheFileSystem;
return resourcePackage.InitializeAsync(initParameters);
}
}
}