搭建游戏 Schema
最后更新:2026 年 7 月 16 日
Schema 的核心概念理清之后,下一步就是动手搭建结构本身。
所有对象都住在 Schema 视图里 —— Entity、Part 和 Enum 都列在侧边栏中。选中任意一个对象,主面板就会打开它的字段和配置。

先搭结构,再填 Record
在添加任何数据之前,先把模型的形状定下来。搭建顺序选得好,过程会顺畅得多 —— 后建的对象往往依赖先建的,而一个字段没法引用或嵌入一个还不存在的东西。
先建 Enum
Enum 定义了你的字段将要引用的固定取值集合。把它们放在最前面建好,等你开始给 Entity 和 Part 加字段时就能直接用上。
例如:TankStatus、WeaponType、ArenaSize。
定义 Entity Part
Entity Part 是可复用的结构片段。要在那些将会包含它们的 Entity 之前定义好,这样 Inclusion 字段才能立刻指向它们。
例如:TankConf、BattleConf、ConnectionConf。
创建 Entity
Entity 是拥有自己 Record 的顶层独立对象。到这一步 Enum 和 Part 都已就位,字段可以马上引用和包含它们。
例如:Tanks、Leaderboards、ActiveGames。
添加字段并连接对象
所有对象都建好之后,给 Entity 和 Part 添加字段。用 Relationship 字段把 Entity 连到其他 Entity,用 Inclusion 字段嵌入 Entity Part。
施加约束
结构稳定下来之后,再用约束把它收紧 —— Required、Unique、最小最大值、条目数量。只在这些约束反映真实规则时才加,别为了填满选项而加。
到 Data 视图里检查一遍
打开 Data 视图,建一条测试 Record。如果表单让人困惑,或者结构感觉别扭,问题通常出在 Schema 上 —— 在灌入真实数据之前先改好。
第一版尽量简单。日后扩展一个干净的 Schema,通常比精简一个过度设计的 Schema 容易得多。
创建 Entity
当你需要一个拥有自己 Record 的完整独立对象时,就用 Entity。
在 Schema 视图中点击 + New 并选择 Entity,然后填写:
- Name —— 对象名称,会贯穿整个 Schema 和 Data 视图
- Description —— 可选,帮助团队其他成员理解这个对象的用途
Entity 对应你游戏中的一个真实概念 —— Player 档案、武器配置、对战记录,或是一个全局设置对象。如果这个对象应当在 Data 视图中作为独立 Record 存在,那它属于 Entity,而不是 Entity Part。
创建 Entity Part
当你想定义一段隶属于其他对象、可复用的结构片段时,就用 Entity Part。
点击 + New 并选择 Part,然后填写:
- Name —— part 的名称
- Description —— 可选
当同一组字段需要出现在多个 Entity 中,或者一个大 Entity 更适合由若干个有名字的小块拼起来时,Entity Part 就很有用。一个装着武器和装甲设置的 TankConf part,可以被 Tanks 包含,也能在任何需要同样结构的地方复用。
如果这个对象应当住在另一个对象内部、而不是独立存在,那它属于 Entity Part。
创建 Enum
当某个字段只应接受预定义清单中的一个值时,就用 Enum。
点击 + New 并选择 Enum,然后填写:
- Name —— enum 的名称
- Values —— 允许的选项清单
Enum 最适合用于受控选项 —— 状态值、分类、类型。一个取值为 Active、Destroyed、Respawning 的 TankStatus enum,能保证那个字段里绝不会存进意料之外的值。
取值应当来自固定清单时用 Enum;取值应当直接填写时用 Primitive。
给对象添加字段
Entity 或 Entity Part 建好之后,就定义它的字段。在对象面板里点击 + Add field。
每个字段都需要:
- Name —— 字母、数字和下划线;必须以字母开头
- Kind —— 这个字段存什么,以及它如何与其他对象相连
选对 kind
- Primitive
- Enum reference
- Relationship → entity
- Inclusion ↩ part
直接存放一个标量值。大多数直接装值的字段都用它 —— 一个名字、一个速度、一个开关、一个时间戳。

直接存放一个标量值。大多数直接装值的字段都用它 —— 一个名字、一个速度、一个开关、一个时间戳。

| 类型 | 存放 |
|---|---|
| Text | 短字符串 |
| Long text | 多行字符串 |
| Integer | 整数 |
| Number | 浮点数 / 小数 |
| Decimal | 定精度数 |
| Boolean | true / false |
| Date & time | ISO 时间戳 |
| Date | YYYY-MM-DD |
| UUID | 唯一标识符 |
| JSON | 结构化对象 |
| 经校验的邮箱 | |
| URL | 链接 |
把字段限定为某个预定义 Enum 中的一个值。用于状态、分类,或任何取值集合固定的字段。

选定这个 kind 之后,再选择该字段引用哪个 Enum。这个字段只会接受那个 Enum 中定义过的值。
建立一个指向另一个 Entity 的外键。当当前对象应当指向一条独立存在的 Record 时使用。

选择目标 Entity 和基数:单个链接选 1-to-1,多个选 1-to-many。与 Inclusion 不同,Relationship 不会嵌入目标的结构,它只存一个指向对方的引用。
把一个 Entity Part 直接嵌进当前对象。当嵌套的结构隶属于父对象、不应独立存在时使用。

选择目标 Entity Part 和基数:嵌入单个实例选 1-to-1,嵌入一组选 1-to-many。与 Relationship 不同,Inclusion 会把 part 的字段直接插进父对象的结构里。
结构隶属于该对象时,用 Inclusion。对象应当指向某个独立存在的东西时,用 Relationship。
所有类型和约束的完整参考,见 Schema Object Reference。
用 Singleton 表示唯一 Record
如果某个对象只应有一条 Record,就在创建或编辑该 Entity 时把它标记为 Singleton。
全局配置对象,或整个 Project 范围内唯一的设置,就用 Singleton。一个装着全服参数的 GameConfig entity 应当恰好存在一份 —— 而不是一长串 Record。
普通 Entity 可以有很多条 Record,Singleton Entity 恰好只有一条。Data 视图会随之改变 —— 显示的不是 Record 列表,而是单个可编辑表单。
ER 图
Schema 视图中的 ER diagram 标签页,会实时展示所有对象及其连接关系的可视化地图。它直接由 Schema 推导而来,你增删或修改对象和字段时会自动更新 —— 不需要手工画。

用 ER 图可以一眼审视整体结构、发现对象之间缺失的连接、确认基数设置是否正确,或是把模型分享给想了解数据设计、又不想逐个点开对象的同事。
对象类型
图中用不同颜色的节点表示三种 Schema 对象类型:
独立对象
顶层对象,在 Data 视图中拥有自己的 Record。会被其他对象引用或包含。
可复用的片段
通过 Inclusion 字段嵌进 Entity 内部的结构片段,没有独立的 Record。
受控的取值集合
允许取值的固定清单。在整个 Schema 中通过 Enum reference 与字段相连。
连接类型
节点之间的连线表示对象如何相连。图中用三种线型,与 ER diagram 标签页右上角的图例一致:
| 连线 | 线型 | 连接的是 |
|---|---|---|
| relationship | 实线 | Entity → Entity,经由 Relationship 字段 |
| inclusion | 虚线 | Entity → Part,经由 Inclusion 字段 |
| enum | 点线 | 字段 → Enum,经由 Enum reference 字段 |
适用时连线上会标注基数 —— 用了该设置的 Relationship 和 Inclusion 连接上会出现 1-to-many。
常见的设计失误
该用 Inclusion 时用了 Relationship —— 如果嵌套的结构隶属于父对象、没有独立的生命周期,就用 Inclusion 把它嵌进去,而不是用 Relationship 连过去。
该用 Relationship 时用了 Inclusion —— 如果被关联的对象独立存在、并且可能被多处引用,就用 Relationship,而不是嵌一份副本进来。
定义又大又平的 Entity,而不用 Part 来组合 —— 当多个 Entity 共享同一组字段时,把这组字段抽成一个 Entity Part 再包含进来,别手工把字段复制好几遍。
不要因为编辑器允许就往上堆复杂度。Relationship、Inclusion 和 Entity Part 只有在反映 Project 真实结构时才有价值。
下一步
- Working with Game Data —— 处理由 Schema 生成的那些 Record
- Backoffice MCP Integration —— 借助 AI 助手搭建或扩展 Schema,也可以从一份 Game Design Document 一次性生成完整 Schema