数据模型参考
六个可创作的 asset 家族、战斗从它们创建出的运行时类型,以及谁可以修改战斗状态的规则。
写集成代码时,用这页决定哪个类型该引用、该读取,以及哪些类型不应直接访问。GCS 的数据模型分成两层。Asset 是你在 Game Card Editor 里创作、存进数据库的内容;运行时模型是战斗开始那一刻从这些 asset 构建出来的对象。分清两者之后,大多数“这个值到底存在哪”的疑问在变成 bug 之前就有了答案
可创作 asset
六个内容家族覆盖所有可创作对象:
| Type | 用户可见职责 |
|---|---|
GameCard | 一张可打出的卡牌定义:费用、类型、目标模式、keywords、标签、美术和行为 |
GameStatus | 一个 buff、debuff 或反应式规则:层数策略、衰减、图标、标签、行为 |
GameEnemyUnit | 敌人定义:HP 范围、tier、标签、prefab、意图行为 |
GamePlayerUnit | 玩家定义:HP、能量、职业身份、prefab、起始卡组 |
GameEncounter | 一场战斗的设置:玩家、敌人、奖励卡组、战斗规则、显示数据 |
GameDeck | 一份卡牌条目列表(卡牌加份数),用作起始或奖励内容 |
两个单位家族共享同一个基类 GameUnit,所以玩家单位和敌人带有相同的身份字段:Name、Description、Icon、Template prefab 和 Tags。差别在数值块:GamePlayerUnit 是固定的 Base HP 和 Base Energy,GameEnemyUnit 是 HP Min / HP Max 区间加 Tier
每个家族都有对应的数据库 asset:GameCardDatabase、GameStatusDatabase、GameEnemyUnitDatabase、GamePlayerUnitDatabase、GameEncounterDatabase 和 GameDeckDatabase。数据库是定义的容器,把它注册到场景的 GameCardManager 上,里面的内容才在运行时可达
行为放在哪
GameCard、GameStatus 和 GameEnemyUnit 各自在名为 Behavior 的字段里直接内嵌一张流图(FlowGraph)。不存在需要单独创建、链接、担心丢失的行为 asset。另外三个家族没有图:遭遇战描述的是战斗设置,玩家单位通过卡牌行动,卡组只是一份卡牌列表
如果你在找“遭遇战的图”,它不存在。效果永远属于某张卡、某个状态或某个敌人。遭遇战级别的规则是 BattleRules 上的普通字段,不是节点
运行时模型
GCSApi.StartBattle 执行时,GCS 从已创作的定义构建这一层运行时对象:
| Type | 运行时含义 |
|---|---|
IBattleState | 只读战斗视图:阶段、单位、牌堆、能量、回合、当前遭遇战 |
IBattleController | 受支持的战斗状态修改入口 |
UnitState | 单个单位的实时状态:当前 HP、护甲、状态、标记位 |
EnemyUnitState | 带意图和行为上下文的敌人版 UnitState |
CardInstance | 战斗牌堆里的一张卡牌副本,有自己的实例 id 和升级标记 |
CardPile | 一个运行时牌堆:手牌、抽牌堆、弃牌堆或消耗(exhaust)堆 |
CardCostRule | 作用在单个卡牌实例上的费用修改,可以永久生效,也可以在设定回合数后到期 |
GCSApi | 战斗控制、事件和内容注册表的公开入口 |
Monitor 窗口实时展示的就是这一层。一个值出现在那里(当前 HP、护甲、层数、牌堆内容),它就是运行时状态,不是 asset 上编辑的字段

定义与实例
定义是已创作的内容,实例是战斗从定义复制出的副本
| 概念 | 例子 | 不要混淆为 |
|---|---|---|
| 卡牌定义 | 名为 Strike 的 GameCard | 当前在手牌里的那个 CardInstance |
| 单位定义 | 名为 Strawman 的 GameEnemyUnit | 该敌人在战斗中的当前 HP 和护甲 |
| 状态定义 | 名为 Burn 的 GameStatus | 某个单位当前的 Burn 层数 |
| 卡组定义 | 一个 GameDeck | 运行时的抽牌堆、弃牌堆和消耗堆 |
实例状态在战斗开始时创建一次。敌人从定义的区间掷出 HP(两端都取得到)后就用这个结果;卡组条目按份数变成抽牌堆里的 CardInstance 副本。在 Play Mode 里编辑定义,不会改写已经从它创建出来的状态
修改规则
绝不要在自己的代码里直接修改运行时对象。受支持的路径有三条:
- 外部 C# 集成走
GCSApi - 自定义 FlowGraph 节点内部走
ctx.Controller - 已创作的效果走内置 FlowGraph 节点
手动设置 UnitState 的 HP,或者自己往 CardPile 里塞卡,会绕过 Hook、事件、表现层更新和 Monitor 输出。战斗还在跑,但状态不再响应,UI 和实际状态开始脱节。每一次修改都应该走 controller 方法
仅内部使用的类型
部分运行时和编辑器 class 属于实现细节。一个类型如果没有通过创作 UI、GCSApi、公开节点基类、事件参数或文档化注册表暴露,即使 C# 能访问到,也把它当作 internal。内部类型可能在版本之间改变形态,文档化入口不会