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

示例 · 配置 Config

从 items.csv 读一份真实物品数据(8 行,含价格/堆叠/重量/稀有度/类别),运行期 Build 成 ConfigBlobTable<T> 注册——配置即数据,不在代码里写死。

文件:HycSimpleItemRow.cs / HYCSimpleConfigDemoSystem.cs / Resources/items.csv

心智模型

  • 模板 / Excel → 生成期:ConfigTemplate + ConfigFieldType 描述表结构;ConfigGenerator 据此生成 CfgXxx 行结构体([BlobGenerate],blittable,含 BlobString)、XxxBlobSystem(引导期把 .blob 读回并 ConfigRegistry.Register)、枚举类。
  • 运行期:任意代码用生成式门面 {ns}.ConfigManager.{Type}.GetByID(id) 查表,无需 World 句柄。

真实项目链路(5 步)

① 建模板       编辑器里定义 ConfigTemplate(加字段,枚举字段引用 ConfigEnumDefinition)
② 生成代码     HYC Framework/Config/1-生成配置模板与代码 → CfgXxx + XxxBlobSystem + 枚举
③ 填数据+导出   .../2-导出Blob → Assets/StreamingAssets/ConfigBlob/*.blob
④ 引导期注册    生成的 XxxBlobSystem(A1)TryRead → ConfigBlobTable.FromBlob → Register
⑤ 运行期读      门面 {ns}.ConfigManager.{Type}.GetByID(id)
⚠
导出落点只有一个真源:ConfigDataSettings.BlobOutputDir(默认 Assets/StreamingAssets/ConfigBlob,必须位于 StreamingAssets 内)。运行期读取路径 BlobLoadPath 由它派生(剥掉前缀),不要手写两份路径;输出目录不在 StreamingAssets 内时导出会直接报错,别靠改加载路径绕过。

这个示例怎么跑的

HYCSimpleConfigDemoSystem 把「第 4 步建表 + 注册」从数据文件加载了:运行期读 Resources/items.csv → ConfigBlobTable<HycSimpleItemRow>.Build(rows, index) → ConfigRegistry.Register。这样导入即跑、不依赖先跑生成器,且改数据只改 CSV。

// 读取发生在 System.OnCreate(建 World 时)——WebGL / Android 上 StreamingAssets 不能直接读文件,
// 预取必须在建 World 前完成:引导入口用 await FrameworkBootstrap.InitializeAsync("World")
// (内部先 await StreamingAssets.PreloadAsync())。PC / iOS 上同步/异步入口等价,同一套代码。

给 AI 的雷区

  • 行结构体必须 blittable:ConfigBlobTable<TRow> where TRow : unmanaged。含 string/class 字段会编译不过;文本一律用 BlobString(生成器自动处理)。
  • 查表靠 id 索引:Build(rows, explicitIndex) 的 explicitIndex 必须给出 id→行序,否则 TryGet(id) 按行序 0..n-1 找,命中不到你想要的 id。
  • 枚举字段在 Blob 里是 int:需 (int)XxxKind.Red 比较,且数值是 1 基(没有 0 值)。
  • 查表是世界无关的:门面是静态调用,不要在系统里缓存 World 来查表;⛔ 也不要调低层 ConfigRegistry。
  • 外部数据也要 blittable:从 CSV/Excel 读到的字段,最终必须映射成纯标量 TRow。本例 CSV 里的 Name 只给人看,行内不存文本。
  • 🔴 跨端:自己手写加载逻辑时,读字节一律走 StreamingAssets.ReadBytes(相对路径),禁止 File.ReadAllBytes(Application.streamingAssetsPath + …)。

验证清单

  • 进 Play,Console 打印 [HYCSimple] 配置表加载:8 行,已注册到 ConfigRegistry。
  • 改 Config/Resources/items.csv 某行 Price 后重进 Play,日志里的 Price 随之变化(证明配置不在代码里写死)。
  • 走真实链路:建模板 → 生成代码 → 导出 Blob → 引导期注册 → 门面命中。