// ============================================================================ // YooAssetPackageConfig.cs — YooAsset 多 Package 架构配置 // 定义 Package 名称常量和资源目录→Package 路由表 // ============================================================================ // // 在 YooAsset Editor (YooAsset → AssetBundle Collector) 中配置: // 每个 Package 对应一个独立的构建产物,可独立下载和更新。 // // ┌───────────────┬─────────────────────────────────────────┬──────────────┐ // │ Package │ 收集路径 (CollectPath) │ 部署方式 │ // ├───────────────┼─────────────────────────────────────────┼──────────────┤ // │ UI │ Assets/ResourcesOut/UI │ Remote │ // │ │ Assets/ResourcesOut/UIComp │ │ // │ │ Assets/ResourcesOut/Sprite │ │ // │ │ Assets/ResourcesOut/Texture │ │ // │ │ Assets/ResourcesOut/Font │ │ // ├───────────────┼─────────────────────────────────────────┼──────────────┤ // │ Prefab │ Assets/ResourcesOut/BuiltIn │ Remote │ // │ │ Assets/ResourcesOut/Shader │ │ // │ │ Assets/ResourcesOut/Materials │ │ // │ │ Assets/ResourcesOut/ScriptableObject │ │ // │ │ Assets/ResourcesOut/Scenes │ │ // │ │ Assets/ResourcesOut/Config │ │ // ├───────────────┼─────────────────────────────────────────┼──────────────┤ // │ UIEffect │ Assets/ResourcesOut/UIEffect (已有) │ Remote │ // ├───────────────┼─────────────────────────────────────────┼──────────────┤ // │ Dll │ HybridCLR 热更 DLL │ Remote │ // ├───────────────┼─────────────────────────────────────────┼──────────────┤ // │ Battle │ Assets/ResourcesOut/Hero │ Remote │ // │ │ Assets/ResourcesOut/Battle │ │ // ├───────────────┼─────────────────────────────────────────┼──────────────┤ // │ Audio │ Assets/ResourcesOut/Audio │ Remote │ // └───────────────┴─────────────────────────────────────────┴──────────────┘ // // ============================================================================ using System.Collections.Generic; namespace ProjSG.Resource { /// /// YooAsset Package 名称常量。 /// 必须与 AssetBundleCollectorSetting.asset 中的 PackageName 一致。 /// public static class YooAssetPackageConfig { // ==================================================================== // Package 名称(与 Collector 完全一致) // ==================================================================== /// UI 资源包:UI 窗口、UIComp、Sprite、Texture、Font public const string UI = "UI"; /// 通用预制体包:BuiltIn、Shader、Materials、ScriptableObject、Scenes、Config public const string Prefab = "Prefab"; /// UI 特效包:UIEffect 目录 public const string UIEffect = "UIEffect"; /// HybridCLR 热更 DLL 包 public const string Dll = "Dll"; /// 战斗资源包:Hero Spine、Battle Prefabs public const string Battle = "Battle"; /// 音频资源包:Audio 目录 public const string Audio = "Audio"; public const string Video = "Video"; public const string Builtin = "Builtin"; // 兼容旧版本,包含 BuiltIn 目录的资源(Shader、Materials、ScriptableObject、Scenes、Config 等) /// /// 主包名 — 在 YooAssetService/YooAssetInitializer 中作为 DefaultPackage。 /// 选择 Prefab 包,因为它包含 BuiltIn/Shader/Materials 等启动必需资源。 /// public const string DefaultPackage = Prefab; /// /// 所有需要初始化的 Package(不含 Dll,Dll 包由热更流程单独管理)。 /// public static readonly string[] AllPackages = new[] { Prefab, // 先初始化默认包 UI, UIEffect, Battle, Audio, Builtin, }; // ==================================================================== // 资源目录 → Package 路由表 // ==================================================================== /// /// 资源目录前缀到 Package 名称的映射。 /// key 是 ResourcesOut 下的一级目录名(小写),value 是 Package 名称。 /// private static readonly Dictionary _directoryToPackage = new Dictionary { // UI Package { "ui", UI }, { "uicomp", UI }, { "sprite", UI }, { "texture", UI }, { "font", UI }, // Prefab Package (default — BuiltIn, Shader, Materials, etc.) // { "builtin", Prefab }, // 移除重复项,builtin 只指向 Builtin 包 { "shader", Prefab }, { "materials", Prefab }, { "graphic", Prefab }, // 旧路径兼容 "Graphic/Shader", "Graphic/Material" { "scriptableobject", Prefab }, { "scenes", Prefab }, { "config", Prefab }, { "prefab", Prefab }, // UIEffect Package { "uieffect", UIEffect }, { "effect", UIEffect }, // Battle Package { "hero", Battle }, { "battle", Battle }, // Audio Package { "audio", Audio }, // Video Package { "video", Video }, // Builtin Package(兼容旧版本,包含 BuiltIn 目录的资源) { "builtin", Builtin }, }; /// /// 根据完整资源路径确定应使用的 Package 名称。 /// 例如 "Assets/ResourcesOut/UI/LoginWin.prefab" → "UI" /// 例如 "Assets/ResourcesOut/BuiltIn/Font/MainFont.ttf" → "Prefab" /// /// 资源路径(完整路径或相对路径) /// Package 名称,匹配不到返回 DefaultPackage public static string GetPackageForLocation(string location) { if (string.IsNullOrEmpty(location)) return DefaultPackage; // 去掉 "Assets/ResourcesOut/" 前缀 string relativePath = location; const string PREFIX = "Assets/ResourcesOut/"; if (relativePath.StartsWith(PREFIX)) { relativePath = relativePath.Substring(PREFIX.Length); } // 取一级目录名 int slashIndex = relativePath.IndexOf('/'); string topDir = slashIndex >= 0 ? relativePath.Substring(0, slashIndex) : relativePath; if (_directoryToPackage.TryGetValue(topDir.ToLower(), out string packageName)) { return packageName; } return DefaultPackage; } } /// /// YooAsset 资源标签常量。 /// 用于细粒度资源分组和按需下载。 /// public static class YooAssetTagConfig { // 战斗相关 public const string BattleSpine = "tag_battle_spine"; public const string BattleEffect = "tag_battle_effect"; public const string BattleSound = "tag_battle_sound"; public const string BattleMap = "tag_battle_map"; // UI 相关 public const string UIMain = "tag_ui_main"; public const string UIShop = "tag_ui_shop"; public const string UIBattle = "tag_ui_battle"; public const string UIHero = "tag_ui_hero"; // 通用 public const string Shader = "tag_shader"; public const string Font = "tag_font"; public const string Material = "tag_material"; public const string Video = "tag_video"; } }