内容模型
GCS 内容由一组可创作资产组成:卡牌、卡组、状态、单位和遭遇战。运行时通过六个数据库家族发现这些内容。
适用于批量创作内容前建立对象模型;也适用于排查资产存在于磁盘上、但未出现在选择器或战斗中的问题。GCS 内容由少量可创作对象组成,每个对象都回答一个面向用户的问题:
| 用户问题 | GCS 对象 |
|---|---|
| 玩家可以打出什么? | Card |
| 玩家开局使用或从奖励中获得什么卡组? | Deck |
| 哪个临时规则挂在单位身上? | Status |
| 玩家可以控制谁? | Player unit |
| 出现哪些敌人,它们如何行动? | Enemy unit |
| 一个场景应该启动哪场战斗? | Encounter |
| 哪些全局战斗规则生效? | Battle rules(遭遇战的一部分) |
| 运行时从哪里发现内容? | Database |
每个对象都住在六个数据库家族之一里,场景的 GameCardManager 从这些数据库读取内容:
可创作对象
| 对象 | 拥有的内容 |
|---|---|
| Card | 名称、费用、类型、目标模式、标签、美术图和打出时行为 |
| Deck | 一组有顺序或经过筛选的卡牌定义 |
| Status | 层数规则、衰减规则、图标、标签和反应式行为 |
| Player unit | 玩家属性、头像或 prefab、初始卡组和职业身份 |
| Enemy unit | HP 范围、prefab、标签、阶级、意图和敌人回合行为 |
| Encounter | 玩家单位、敌人阵容、奖励牌组、战斗规则、标签和显示数据 |
| Database | 运行时可用的卡牌、卡组、状态、单位和遭遇战集合 |
这些对象都在同一个窗口里编辑。Workbench 给每个家族一个专属模式,每个模式都遵循同一套操作:选数据库,选条目,改字段,看实时预览。下图的 Card 模式是六个模式里最忙的一个:

行为归属
卡牌、状态和敌人各自在 Behavior 字段中内嵌一张 FlowGraph。GCS 不需要单独的行为资产。遭遇战没有行为图;它描述参战单位、奖励和战斗规则,具体行为由参战内容自己定义。
把行为放在你正在创作其结果的那个对象上:
- 卡牌效果属于卡牌;
- 状态反应属于状态;
- 敌人行动属于敌人;
- 遭遇战层面的节奏属于遭遇战的战斗规则;
- 项目专属的可复用行为可以实现为自定义节点。
除非行为确实需要离开 GCS,例如通知 GES 处理成就或任务系统,否则应把卡牌战斗行为保留在 GCS 内容或 FlowGraph 中。
表现资源归属
表现资源放在拥有它的对象旁边:卡牌美术放在卡牌或卡牌类型文件夹下,单位美术和 prefab 放在单位文件夹下,状态图标放在状态文件夹下,遭遇战背景放在遭遇战文件夹下。只有跨对象共享的资产(UI 图、字体、共享战斗特效)才放入 Content/Art/。
demo 使用同一套纵向优先布局。一个对象及其依赖资源位于同一处,删除、复制或导出某个对象家族时更容易保持资源完整。
运行时可用性
文件存在于磁盘上,不代表它在运行时可用。资产必须属于当前场景 GameCardManager 正在使用的某个数据库。
当某个对象没有出现在选择器或运行时里时,按顺序检查:
- 对象确实存在;
- 对象位于正确的数据库中;
- manager 引用了该数据库;
- 场景使用了这个 manager 或 bootstrap 设置
内容未显示时,最常见原因是资产位于当前场景未注册的数据库中。项目同时使用多个数据库时,优先检查 manager 是否引用了正确数据库。
以 Demo 作为模型
Demo 把所有示例定义放在 Demo/Databases/ 下的六个预设数据库中:80 张卡牌、16 套卡组、30 个状态、12 个玩家单位、16 个敌人、12 场遭遇战。所有表现资源位于 Demo/Content/。可以把 demo 当作结构范例;生产内容应放在项目自己的数据库和文件夹中,避免 demo 更新影响自定义数据。