◆ 持续开发中 · 当前为非稳定版本,如需抢先体验请通过 GitHub Issues 联系作者

枚举配置

把配置表里那些「0=顺序 1=随机 2=离玩家最远」的裸 Int 字段,变成真正的 C# 枚举——编辑器里下拉选择、自动导出枚举类、运行期按枚举名比较,同时 Blob 里仍然是 int,数据结构不变。

命名空间 HYC.Framework.Config(定义)/ HYC.Framework.Config.Editor(生成器)。生成的枚举类命名空间取 ConfigDataSettings.Namespace,落在 ConfigDataSettings.OutputDir/Enums/。

核心类

类职责
ConfigEnumDefinition枚举定义资产(SO),[CfgAsset("枚举/枚举定义", 0, Hide = true)]
ConfigEnumCodeGenLoadAllEnums / FindEnum / Validate / GenerateCode / WriteFile / Export / CreateEnumAsset
ConfigEnumValuevalues 列表项:name + description

入口:数据编辑器里右键 → 枚举定义(ConfigEnumCodeGen.CreateEnumAsset(folder))。

生成产物

using System;

namespace <ConfigDataSettings.Namespace>
{
    /// <summary>
    /// 装备/部位
    /// </summary>
    public enum EquipSlot
    {
        /// <summary>
        /// 头部
        /// </summary>
        Head = 1,
        Body = 2,
        Weapon = 3,
    }
}

数值由框架自动分配,用户只填名字:

// 数值由框架自动分配,用户只填名字
public static long ValueOf(ConfigEnumDefinition def, int index)
    => def != null && def.isFlags ? 1L << index : index + 1L;

坑

  • 枚举定义必须先于配置模板生成。模板校验会 FindEnum(enumRefClassName),找不到就报「字段 X 的枚举 Y 不存在」。建表脚本里请把 EnsureEnumDefs() 放在模板循环之前。
  • enumRefClassName 填的是 className 不是 displayName。displayName 支持 分类/名称 这种带斜杠的写法,不能直接当类名。
  • 类名不能与配置模板的 className 冲突,也不能与其它枚举同名。建议枚举名带语义后缀(WaveSpawnMode、ItemKind)。
  • 枚举名 == 字段名是合法的(如字段 OnMaxStacks 类型 OnMaxStacks),C# 的 Color-Color 规则能正确处理。
  • 1 基,没有 0。老数据迁移要 +1;判断「未设置」要用 0,不要用某个枚举成员。
  • 枚举成员顺序 / 增删 = 破坏性变更:会改变既有数值,已导出的 Blob 会读不出 / 串号,必须重跑配置导出。
  • 运行期:Blob 里枚举是 int,需 (int)XxxKind.Red 比较。