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.jsonManifest 记录表类型全名、资源 Address、分区 Key、Group 和预加载标记。运行时因此不需要扫描 Unity 资源或从 Address 反推表信息。
生成的集合是指向解析后表数据的轻量只读视图,避免把整张表再次展开为大量托管集合。TableModule 在解析完 TextAsset.bytes 后立即释放资源句柄,只缓存生成的表对象及其数据;释放表或 Group 后不要继续保存其中的行或集合视图。
注意事项
- 修改表结构或源数据后必须重新 Build;仅在 SuperCoreKit 中
Refresh不会生成产物。 - Excel/WPS 正在占用 XLSX 时构建器可能无法读取,应先关闭文件。
- Group 是缓存生命周期约束,不改变资源所属 YooAsset Package。
- 同组成员必须同时预加载或同时按需加载。
- 表加载依赖
ResModule;业务应在相关 GameSystem 初始化中等待加载完成后再调用CompleteInit()。 - 不要硬编码构建后的
Table_XxxAddress;运行时定位由 Manifest 管理。 GetByKey未命中会返回默认行,不能把它当作配置存在性校验;关键关系应在业务初始化阶段显式验证。
