using YooAsset;
namespace AlicizaX.Resource.Runtime
{
internal partial class ResourceManager
{
///
/// 根据运行模式创建初始化操作数据
///
///
private InitializationOperation CreateInitializationOperationHandler(ResourcePackage resourcePackage, string hostServerURL, string fallbackHostServerURL)
{
switch (PlayMode)
{
case EPlayMode.EditorSimulateMode:
{
// 编辑器下的模拟模式
return InitializeYooAssetEditorSimulateMode(resourcePackage, DefaultPackageName);
}
case EPlayMode.OfflinePlayMode:
{
// 单机运行模式
return InitializeYooAssetOfflinePlayMode(resourcePackage);
}
case EPlayMode.HostPlayMode:
{
// 联机运行模式
return InitializeYooAssetHostPlayMode(resourcePackage, hostServerURL, fallbackHostServerURL);
}
case EPlayMode.WebPlayMode:
{
// WebGL运行模式
return InitializeYooAssetWebPlayMode(resourcePackage, hostServerURL, fallbackHostServerURL);
}
default:
{
return null;
}
}
}
private InitializationOperation InitializeYooAssetEditorSimulateMode(ResourcePackage resourcePackage, string packageName)
{
var initParameters = new EditorSimulateModeParameters();
//注意:如果是原生文件系统选择EDefaultBuildPipeline.RawFileBuildPipeline
var buildPipeline = EDefaultBuildPipeline.BuiltinBuildPipeline;
var simulateBuildResult = EditorSimulateModeHelper.SimulateBuild(buildPipeline, DefaultPackageName);
var editorFileSystem = FileSystemParameters.CreateDefaultEditorFileSystemParameters(simulateBuildResult);
initParameters.EditorFileSystemParameters = editorFileSystem;
return resourcePackage.InitializeAsync(initParameters);
}
private InitializationOperation InitializeYooAssetOfflinePlayMode(ResourcePackage resourcePackage)
{
var buildinFileSystem = FileSystemParameters.CreateDefaultBuildinFileSystemParameters();
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.CreateDefaultWebFileSystemParameters();
#endif
initParameters.WebFileSystemParameters = webFileSystem;
return resourcePackage.InitializeAsync(initParameters);
}
private InitializationOperation InitializeYooAssetHostPlayMode(ResourcePackage resourcePackage, string hostServerURL, string fallbackHostServerURL)
{
IRemoteServices remoteServices = new RemoteServices(hostServerURL, fallbackHostServerURL);
var cacheFileSystem = FileSystemParameters.CreateDefaultCacheFileSystemParameters(remoteServices);
var buildinFileSystem = FileSystemParameters.CreateDefaultBuildinFileSystemParameters(new FileOffsetDecryption());
var initParameters = new HostPlayModeParameters();
initParameters.BuildinFileSystemParameters = buildinFileSystem;
initParameters.CacheFileSystemParameters = cacheFileSystem;
return resourcePackage.InitializeAsync(initParameters);
}
}
}