using System; using System.Collections; using UnityEngine; using YooAsset; public class Init : MonoBehaviour { /// /// 资源系统运行模式 /// public EPlayMode PlayMode = EPlayMode.EditorSimulateMode; public string PackageName = "DefaultPackage"; public string SceneName; void Awake() { Debug.Log($"资源系统运行模式:{PlayMode}"); Application.targetFrameRate = 60; Application.runInBackground = true; DontDestroyOnLoad(this.gameObject); } IEnumerator Start() { // 初始化资源系统 YooAssets.Initialize(); // 加载更新页面 var go = Resources.Load("PatchWindow"); GameObject.Instantiate(go); yield return StartCoroutine(InitPackage()); // 设置默认的资源包 var gamePackage = YooAssets.GetPackage(PackageName); YooAssets.SetDefaultPackage(gamePackage); yield return new WaitForSeconds(1); // 切换到主页面场景 } private void Update() { if (Input.GetKeyDown(KeyCode.A)) { YooAssets.LoadSceneSync(SceneName); } } private IEnumerator InitPackage() { // 创建资源包裹类 var package = YooAssets.TryGetPackage(PackageName); if (package == null) package = YooAssets.CreatePackage(PackageName); // 编辑器下的模拟模式 InitializationOperation initializationOperation = null; if (PlayMode == EPlayMode.EditorSimulateMode) { var buildResult = EditorSimulateModeHelper.SimulateBuild(PackageName); var packageRoot = buildResult.PackageRootDirectory; var createParameters = new EditorSimulateModeParameters(); createParameters.EditorFileSystemParameters = FileSystemParameters.CreateDefaultEditorFileSystemParameters(packageRoot); initializationOperation = package.InitializeAsync(createParameters); } // 单机运行模式 if (PlayMode == EPlayMode.OfflinePlayMode) { var createParameters = new OfflinePlayModeParameters(); createParameters.BuildinFileSystemParameters = FileSystemParameters.CreateDefaultBuildinFileSystemParameters(); initializationOperation = package.InitializeAsync(createParameters); } // 联机运行模式 if (PlayMode == EPlayMode.HostPlayMode) { string defaultHostServer = GetHostServerURL(); string fallbackHostServer = GetHostServerURL(); IRemoteServices remoteServices = new RemoteServices(defaultHostServer, fallbackHostServer); var createParameters = new HostPlayModeParameters(); createParameters.BuildinFileSystemParameters = FileSystemParameters.CreateDefaultBuildinFileSystemParameters(); createParameters.CacheFileSystemParameters = FileSystemParameters.CreateDefaultCacheFileSystemParameters(remoteServices); initializationOperation = package.InitializeAsync(createParameters); } // WebGL运行模式 if (PlayMode == EPlayMode.WebPlayMode) { #if UNITY_WEBGL && WEIXINMINIGAME && !UNITY_EDITOR var createParameters = new WebPlayModeParameters(); string defaultHostServer = GetHostServerURL(); string fallbackHostServer = GetHostServerURL(); string packageRoot = $"{WeChatWASM.WX.env.USER_DATA_PATH}/__GAME_FILE_CACHE"; //注意:如果有子目录,请修改此处! IRemoteServices remoteServices = new RemoteServices(defaultHostServer, fallbackHostServer); createParameters.WebServerFileSystemParameters = WechatFileSystemCreater.CreateFileSystemParameters(packageRoot, remoteServices); initializationOperation = package.InitializeAsync(createParameters); #else var createParameters = new WebPlayModeParameters(); createParameters.WebServerFileSystemParameters = FileSystemParameters.CreateDefaultWebServerFileSystemParameters(); initializationOperation = package.InitializeAsync(createParameters); #endif } yield return initializationOperation; // 如果初始化失败弹出提示界面 if (initializationOperation.Status != EOperationStatus.Succeed) { Debug.LogError($"{initializationOperation.Error}"); } else { // 2. 请求资源清单的版本信息 var operation =package.RequestPackageVersionAsync(); yield return operation; if (operation.Status != EOperationStatus.Succeed) yield break; // 3. 传入的版本信息更新资源清单 var packageVersion = package.GetPackageVersion(); var operation1 =package.UpdatePackageManifestAsync(packageVersion); yield return operation1; if (operation1.Status != EOperationStatus.Succeed) yield break; Debug.Log("init finish"); } } /// /// 获取资源服务器地址 /// private string GetHostServerURL() { //string hostServerIP = "http://10.0.2.2"; //安卓模拟器地址 string hostServerIP = "http://127.0.0.1"; string appVersion = "v1.0"; #if UNITY_EDITOR if (UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.Android) return $"{hostServerIP}/CDN/Android/{appVersion}"; else if (UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.iOS) return $"{hostServerIP}/CDN/IPhone/{appVersion}"; else if (UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.WebGL) return $"{hostServerIP}/CDN/WebGL/{appVersion}"; else return $"{hostServerIP}/CDN/PC/{appVersion}"; #else if (Application.platform == RuntimePlatform.Android) return $"{hostServerIP}/CDN/Android/{appVersion}"; else if (Application.platform == RuntimePlatform.IPhonePlayer) return $"{hostServerIP}/CDN/IPhone/{appVersion}"; else if (Application.platform == RuntimePlatform.WebGLPlayer) return $"{hostServerIP}/CDN/WebGL/{appVersion}"; else return $"{hostServerIP}/CDN/PC/{appVersion}"; #endif } /// /// 远端资源地址查询服务类 /// private class RemoteServices : IRemoteServices { private readonly string _defaultHostServer; private readonly string _fallbackHostServer; public RemoteServices(string defaultHostServer, string fallbackHostServer) { _defaultHostServer = defaultHostServer; _fallbackHostServer = fallbackHostServer; } string IRemoteServices.GetRemoteMainURL(string fileName) { return $"{_defaultHostServer}/{fileName}"; } string IRemoteServices.GetRemoteFallbackURL(string fileName) { return $"{_fallbackHostServer}/{fileName}"; } } }