创建卡牌、状态和敌人
构建第一条关联内容循环:一张造成伤害并施加自定义状态的卡牌,一个测试敌人,以及启动它们的遭遇战。
适用于已经完成单资产快速上手、需要理解 GCS 资产引用关系的开发者。本文把前面的单资产快速上手组合成一条可运行循环:一个状态、一张施加它的卡牌、一个测试敌人,以及一个引用这些内容的遭遇战。示例数值只用于验证流程;重点是理解资产之间的引用关系。
如果某类资产还不熟悉,先完成对应单页:卡牌快速上手、状态快速上手、敌人快速上手、遭遇战快速上手。
你会构建什么
| 资产 | 示例名称 | 用途 |
|---|---|---|
| 状态 | Scorched | 一个可堆叠的减益。 |
| 卡牌 | Kindle Strike | 1 费攻击,造成伤害并施加 Scorched。 |
| 敌人 | Training Effigy | 用来测试卡牌和状态的可预测目标。 |
| 遭遇战 | Scorched Trial | 把它们放到同一块棋盘上的战斗。 |
引用链长这样。只有卡牌的流图认识状态,其余资产都在遭遇战里会合:
名称可以替换。第一版应保持简单,便于验证行为。
创建状态
打开 Workbench(Tools/TinyGiants/GCS/Game Card Editor),切换到 Status 模式。
| 字段 | 示例 |
|---|---|
| Name | Scorched |
| Description | Takes extra damage from burn effects. |
| Type | Debuff |
| Icon | 任意临时图标。 |
| Stack Rule | Additive |
| Max Stacks | 9 |
| Decay Rule | Never |
| Show Stack Count | 启用 |
Stack Rule 决定状态落在已经带有它的单位身上时会发生什么:Additive 把新层数加到现有层数上,Max 保留较高的一方,Replace 直接覆盖。Decay Rule 选 Never,层数就一直留着直到被移除;PerTurn 会像 demo 的 Poison 那样每回合掉一层。Max Stacks 为正数时封顶,-1 表示不设上限,0 是无效值(验证会标出来)。

先跳过状态自己的 Behavior 流图。第一个里程碑是证明卡牌能把状态施加到目标单位上;状态自己的可见行为可以在之后添加。
你应该在状态列表里看到 Scorched,带红色的 Debuff chip,名字下面写着 Additive · Never。
创建卡牌
切换到 Card 模式,创建这张攻击牌。
| 字段 | 示例 |
|---|---|
| Name | Kindle Strike |
| Description | Deal 6 damage. Apply 1 Scorched. |
| Cost | 1 |
| Type | 从下拉里选一个现有类型,比如 Skill。 |
| Rarity | Common |
| Tags | 项目已经在用职业或元素标签时才加。 |
在卡牌上打开 Edit FlowGraph,搭一条线性路径:
- 一个 On Card Played 入口。
- 一个 Deal Damage 动作:
Target保持Opponent,Amount填6。 - 一个 Change Status 动作:把
Target从默认的Self切成Opponent,在Status下拉里选Scorched,Mode保持Delta,Amount填1。
Change Status 的目标出厂就是 Self,在卡牌流图里意味着玩家自己。不改它,你的减益就落在自己身上。把它切成 Opponent,是这张图唯一不能省的编辑。
demo 卡牌 Poison Arrow 就是同类结构:造成 3 点伤害,再施加 2 层 Poison。动作之间有两个折叠的 Play Effect 组,负责声音和视觉表现;首次验证可以先忽略表现节点:

保持流图线性。分支、循环和 hook 应在基准卡牌验证通过后再添加。
回到 Workbench,Edit FlowGraph 按钮下方应出现 OnCardPlayed chip,表示图中已有可触发入口。
把卡牌放进卡组
切换到 Deck 模式。新建一个小测试卡组,或复制一个初始卡组,把 Kindle Strike 加进去,至少一张。
小型测试卡组更适合验证:卡组越小,新卡越容易进入手牌。大型卡组可能需要多个回合才能抽到目标卡。
卡组的卡牌列表应包含新条目,列表行的「cards · copies」摘要也应随之更新。
创建或复用玩家单位
切换到 Player 模式。直接复用能工作的 demo 玩家没问题;要新建的话,设置:
| 字段 | 要提供什么 |
|---|---|
| Name | 可读的玩家名称。 |
| Base HP | 足够撑过几个敌方回合。 |
| Base Energy | 3 是常用默认值。 |
| Template | demo 玩家 prefab 或临时占位。 |
| Deck | 在 Deck 折叠组里把测试卡组选为 Starting Deck。 |
Starting Deck 是最容易断开的引用。玩家单位如果指向了其他卡组,新卡不会出现在战斗中,即使其他配置正确。
你应该看到 Deck 折叠组以选择器卡片显示你的测试卡组,带卡牌数量和平均费用。
创建敌人
切换到 Enemy 模式,创建一个简单测试目标:
| 字段 | 示例 |
|---|---|
| Name | Training Effigy |
| Tier | Normal |
| HP Min / HP Max | 18 到 24 |
| Template | demo 敌人 prefab 或占位。 |
给它的 Behavior 流图配置一个可预测意图:一个 Leaf Intent,后面接小额的 Deal Damage。稳定敌人可以降低测试变量,让验证集中在卡牌和状态上。敌人快速上手 详细说明这张图。
创建遭遇战
切换到 Encounter 模式,把所有资产连接到同一场遭遇战中:
| 字段 | 示例 |
|---|---|
| Name | Scorched Trial |
| Difficulty | Normal |
| Player | 使用测试卡组的玩家单位。 |
| Enemy Units | Training Effigy |
| Reward Deck | 任意有效的奖励卡组,或复制的 demo 卡组。 |
| Battle Rules | 不测试规则改动时保持默认值。 |
遭遇战是运行时启动的战斗资产。卡牌、状态、敌人、卡组和玩家单位被遭遇战引用后,才会进入可测试流程。
你应该看到 Preview 的 Lineup 面板里,你的玩家正对着 Training Effigy,旁边标着它掷出的 HP 范围。
在 Play Mode 中测试
确认遭遇战在某个激活的 encounter database 里,然后二选一:把它设为 GameCardEncounterBootstrap 的 Default Encounter,或在代码里用 GCSApi.StartBattle(encounter) 启动。
进入 Play Mode,验证:
- 战斗以你的玩家和
Training Effigy开局。 Kindle Strike出现在手牌里。- 打出它消耗 1 点能量。没有目标选择弹窗时,流图里的
Opponent会解析到场上唯一的敌人。 - 敌人失去 6 点 HP。
Scorched以 1 层出现在敌人身上,第二次打出时涨到 2 层。- 结束回合后敌人仍会执行行动。
故障排查
| 症状 | 最可能的原因 |
|---|---|
| 卡牌从不出现 | 玩家单位用的是另一个起始卡组,或卡牌没有加进卡组。 |
| 卡牌出现但打不出去 | 能量不足、当前不是玩家阶段,或某个 hook 阻止了出牌。 |
| 状态落在了自己身上 | Change Status 节点的 Target 还停在默认的 Self。 |
| 状态完全没有出现 | Change Status 节点指向了错误的状态,或 status database 未激活。 |
| 遭遇战没有列出 | 它不在任何激活的 encounter database 里。 |