// ============================================================================
// 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";
}
}