using System; using UnityEngine; using YooAsset; namespace AlicizaX.Resource.Runtime { internal partial class ResourceModule { /// /// 根据运行模式创建初始化操作数据 /// /// 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); } } }