Skip to content

TableModule 配置表

TableModule 负责加载构建后的表清单与二进制表,并按“表类型 + 分区 Key”提供缓存访问。配置表的制作由独立的 Tools/TableBuilder 完成;运行时不会读取 CSV 或 XLSX。

子功能

快速使用

先在项目根目录 Tables 中创建源表,例如 Item@c.csv。Demo 当前的 tablebuilder.conf 使用 input:"../../Tables",正好指向该目录:

csv
id:int#key,name:loc,icon:res,price:int,tags:arr<str>
1001,Item.apple,Img_Apple,20,Food|Fruit
1002,Item.sword,Img_Sword,100,Weapon|Melee

运行构建器:

powershell
Tools\TableBuilder\build_table.bat

也可以在 Unity 中打开 SuperCoreKit -> Configs -> TableCfg,单击 Build。构建完成后会生成表代码、表二进制和 Table_RuntimeManifest.bytes

按需加载并读取默认分区:

csharp
TableModule tableModule = TableModule.Get();
if (tableModule == null)
    return;

tableModule.LoadTables(success =>
{
    if (!success)
        return;

    ItemTable table = tableModule.GetTable<ItemTable>();
    ItemInfo item = table.GetByKey(1001);
}, typeof(ItemTable));

读取已经加载的表时,也可以使用高频快捷入口:

csharp
if (UtilFunc.TryTable(out ItemTable table))
{
    ItemInfo item = table.GetByKey(1001);
}

GetTable<T>()UtilFunc.TryTable() 只读缓存,不会暗中发起加载。表的加载和释放应由流程或系统生命周期明确管理。

生成产物与设计思路

默认客户端产物包括:

text
Assets/@Scripts/HotUpdate/Configs/Tables/
  ConfigTableRuntime.cs
  ItemTable.cs

Assets/@ResourcePackage/Core/Configs/Tables/
  Table_Item.bytes
  Table_RuntimeManifest.bytes
  Table_RuntimeManifestDebug.json

Manifest 记录表类型全名、资源 Address、分区 Key、Group 和预加载标记。运行时因此不需要扫描 Unity 资源或从 Address 反推表信息。

生成的集合是指向解析后表数据的轻量只读视图,避免把整张表再次展开为大量托管集合。TableModule 在解析完 TextAsset.bytes 后立即释放资源句柄,只缓存生成的表对象及其数据;释放表或 Group 后不要继续保存其中的行或集合视图。

注意事项

  • 修改表结构或源数据后必须重新 Build;仅在 SuperCoreKit 中 Refresh 不会生成产物。
  • Excel/WPS 正在占用 XLSX 时构建器可能无法读取,应先关闭文件。
  • Group 是缓存生命周期约束,不改变资源所属 YooAsset Package。
  • 同组成员必须同时预加载或同时按需加载。
  • 表加载依赖 ResModule;业务应在相关 GameSystem 初始化中等待加载完成后再调用 CompleteInit()
  • 不要硬编码构建后的 Table_Xxx Address;运行时定位由 Manifest 管理。
  • GetByKey 未命中会返回默认行,不能把它当作配置存在性校验;关键关系应在业务初始化阶段显式验证。

SuperCore 使用 MIT License 开源