跳到主要内容

搭建游戏 Schema

最后更新:2026 年 7 月 16 日

Schema 的核心概念理清之后,下一步就是动手搭建结构本身。

所有对象都住在 Schema 视图里 —— Entity、Part 和 Enum 都列在侧边栏中。选中任意一个对象,主面板就会打开它的字段和配置。

带有 ENTITIES、PARTS 和 ENUMS 分区的空 Schema 视图


先搭结构,再填 Record​

在添加任何数据之前,先把模型的形状定下来。搭建顺序选得好,过程会顺畅得多 —— 后建的对象往往依赖先建的,而一个字段没法引用或嵌入一个还不存在的东西。

1

先建 Enum

Enum 定义了你的字段将要引用的固定取值集合。把它们放在最前面建好,等你开始给 Entity 和 Part 加字段时就能直接用上。

例如:TankStatus、WeaponType、ArenaSize。

2

定义 Entity Part

Entity Part 是可复用的结构片段。要在那些将会包含它们的 Entity 之前定义好,这样 Inclusion 字段才能立刻指向它们。

例如:TankConf、BattleConf、ConnectionConf。

3

创建 Entity

Entity 是拥有自己 Record 的顶层独立对象。到这一步 Enum 和 Part 都已就位,字段可以马上引用和包含它们。

例如:Tanks、Leaderboards、ActiveGames。

4

添加字段并连接对象

所有对象都建好之后,给 Entity 和 Part 添加字段。用 Relationship 字段把 Entity 连到其他 Entity,用 Inclusion 字段嵌入 Entity Part。

5

施加约束

结构稳定下来之后,再用约束把它收紧 —— Required、Unique、最小最大值、条目数量。只在这些约束反映真实规则时才加,别为了填满选项而加。

6

到 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 字段 kind

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

带类型选择器的 Primitive 字段 kind

类型存放
Text短字符串
Long text多行字符串
Integer整数
Number浮点数 / 小数
Decimal定精度数
Booleantrue / false
Date & timeISO 时间戳
DateYYYY-MM-DD
UUID唯一标识符
JSON结构化对象
Email经校验的邮箱
URL链接
提示

结构隶属于该对象时,用 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 推导而来,你增删或修改对象和字段时会自动更新 —— 不需要手工画。

展示 Entity、Part、Enum 及其 relationship 与 inclusion 连接的 ER 图

用 ER 图可以一眼审视整体结构、发现对象之间缺失的连接、确认基数设置是否正确,或是把模型分享给想了解数据设计、又不想逐个点开对象的同事。

对象类型​

图中用不同颜色的节点表示三种 Schema 对象类型:

Entity

独立对象

顶层对象,在 Data 视图中拥有自己的 Record。会被其他对象引用或包含。

Part

可复用的片段

通过 Inclusion 字段嵌进 Entity 内部的结构片段,没有独立的 Record。

Enum

受控的取值集合

允许取值的固定清单。在整个 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 真实结构时才有价值。


下一步​