| Assets/HybridCLRDlls.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Assets/Launch/Config/UrlRemoteServices.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Assets/Launch/Config/UrlRemoteServices.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Assets/Launch/Config/WebGLRemoteConfig.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Assets/Launch/Config/WebGLRemoteConfig.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Assets/HybridCLRDlls.meta
New file @@ -0,0 +1,8 @@ fileFormatVersion: 2 guid: abc904664683ec645829ea85e356b657 folderAsset: yes DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: Assets/Launch/Config/UrlRemoteServices.cs
New file @@ -0,0 +1,68 @@ using System; using UnityEngine; using YooAsset; /// <summary> /// 通用的基于 URL 的远程资源服务。 /// 用于非 WebGL 正式包的 HostPlayMode,从版本服务器返回的 resource_url 构建。 /// </summary> public class UrlRemoteServices : IRemoteServices { private readonly string _mainUrl; private readonly string _fallbackUrl; #if UNITY_WEBGL || TEST_BUILD private const int MaxLoggedUrlCount = 120; private static int _loggedUrlCount; #endif public UrlRemoteServices(string baseUrl) : this(baseUrl, baseUrl) { } public UrlRemoteServices(string mainUrl, string fallbackUrl) { _mainUrl = mainUrl.TrimEnd('/'); _fallbackUrl = fallbackUrl.TrimEnd('/'); } public string GetRemoteMainURL(string fileName) { var url = $"{_mainUrl}/{fileName}"; #if UNITY_WEBGL || TEST_BUILD LogRemoteUrl("main", fileName, url); #endif return url; } public string GetRemoteFallbackURL(string fileName) { var url = $"{_fallbackUrl}/{fileName}"; #if UNITY_WEBGL || TEST_BUILD if (!string.Equals(_mainUrl, _fallbackUrl, StringComparison.OrdinalIgnoreCase)) LogRemoteUrl("fallback", fileName, url); #endif return url; } #if UNITY_WEBGL || TEST_BUILD private static void LogRemoteUrl(string source, string fileName, string url) { if (_loggedUrlCount >= MaxLoggedUrlCount) return; if (!ShouldLog(fileName)) return; _loggedUrlCount++; Debug.Log($"[UrlRemoteServices][Diag] {source} file='{fileName}' url='{url}'"); } private static bool ShouldLog(string fileName) { return fileName.EndsWith(".version", StringComparison.OrdinalIgnoreCase) || fileName.EndsWith(".hash", StringComparison.OrdinalIgnoreCase) || fileName.EndsWith(".bytes", StringComparison.OrdinalIgnoreCase) || fileName.EndsWith(".bundle", StringComparison.OrdinalIgnoreCase) || fileName.EndsWith(".rawfile", StringComparison.OrdinalIgnoreCase); } #endif } Assets/Launch/Config/UrlRemoteServices.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: e2f5bbf079899b14a835dc61f75ca2a9 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Assets/Launch/Config/WebGLRemoteConfig.cs
New file @@ -0,0 +1,98 @@ // ============================================================================ // WebGLRemoteConfig.cs — WebGL 远程资源加载配置 // 统一配置:Editor 和构建产物使用同一套变量,改这里就是改所有环境的行为。 // ============================================================================ using UnityEngine; using YooAsset; public static class WebGLRemoteConfig { // ==================================================================== // ★★★ 统一配置 — Editor 和构建产物都读这里,改完重新编译/构建即可 ★★★ // ==================================================================== /// <summary> /// 资源加载模式(全环境统一)。 /// Local = 资源随包,从 StreamingAssets 加载 /// LocalCDN = 资源不随包,从本地 HTTP 服务器加载(开发调试) /// RemoteCDN = 资源不随包,从远程 CDN 加载(生产环境) /// </summary> public static readonly ResourceMode CurrentMode = ResourceMode.RemoteCDN; /// <summary> /// LocalCDN 模式下的 HTTP 服务器地址(本地磁盘启 HTTP 服务器)。 /// </summary> public static readonly string LocalCDNServerURL = "http://localhost:9095"; /// <summary> /// RemoteCDN 模式下的主 CDN 地址。 /// </summary> public static readonly string RemoteMainURL = "https://cdn.example.com/bundles/WebGL"; /// <summary> /// RemoteCDN 模式下的备用 CDN 地址(留空则与主地址相同)。 /// </summary> public static readonly string RemoteFallbackURL = ""; /// <summary> /// 本地 CDN 的磁盘路径(仅用于 Editor 工具生成 CDN 目录时的默认路径)。 /// </summary> public static readonly string LocalCDNPath = @"D:\LocalCDN"; // ==================================================================== // 资源模式枚举 // ==================================================================== public enum ResourceMode { Local, LocalCDN, RemoteCDN, } // ==================================================================== // 便捷属性 // ==================================================================== public static bool EnableRemoteMode => CurrentMode != ResourceMode.Local; public static string ActiveServerURL { get { switch (CurrentMode) { case ResourceMode.LocalCDN: return LocalCDNServerURL; case ResourceMode.RemoteCDN: return RemoteMainURL; default: return ""; } } } // ==================================================================== // IRemoteServices 创建 // ==================================================================== public static IRemoteServices CreateRemoteServices() { if (CurrentMode == ResourceMode.Local) return null; string mainUrl = ActiveServerURL; if (string.IsNullOrEmpty(mainUrl)) { Debug.LogWarning($"[WebGLRemoteConfig] 模式={CurrentMode} 但服务器地址为空,回退到 Local 模式"); return null; } string fallbackUrl; if (CurrentMode == ResourceMode.RemoteCDN && !string.IsNullOrEmpty(RemoteFallbackURL)) fallbackUrl = RemoteFallbackURL; else fallbackUrl = mainUrl; Debug.Log($"[WebGLRemoteConfig] 模式={CurrentMode}, MainURL={mainUrl}, FallbackURL={fallbackUrl}"); return new UrlRemoteServices(mainUrl, fallbackUrl); } } Assets/Launch/Config/WebGLRemoteConfig.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 42942d325df0d1141a646ecea2a93e63 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: