三国卡牌客户端基础资源仓库
yyl
2026-05-12 77a24fd883295e5c5bb5f72badceaaab598faa9b
漏提交部分
5个文件已添加
196 ■■■■■ 已修改文件
Assets/HybridCLRDlls.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Launch/Config/UrlRemoteServices.cs 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Launch/Config/UrlRemoteServices.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Launch/Config/WebGLRemoteConfig.cs 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Launch/Config/WebGLRemoteConfig.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | 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: