跳到主要内容

第二场战斗

Guide

在空场景中建立独立数据库与完整内容依赖链,亲手完成一场可以预告意图、选择目标、结算卡牌并推进回合的自定义战斗

完成第一场战斗后,你已经验证了卡牌、状态、敌人意图与回合推进,现在从空场景重新建立这条链路,让每项配置都能在后续资产和最终运行结果中找到明确对应

从状态到遭遇战的六类资产​

六类内容并不是彼此独立的配置项,Embermark 会先创建为可供行为图引用的状态,Ember Strike 再使用它定义卡牌结算,随后进入 Ember Trial Deck,成为 Trial Hero 的抽牌来源,Trial Dummy 则通过另一张行为图复用同一状态,最后由 Ember Trial 汇总双方内容与战斗规则

创建顺序资产依赖与作用
1状态 Embermark提供卡牌与敌人行为都会引用的可见叠层标记
2卡牌 Ember Strike消耗 1 点能量,造成 6 点伤害并施加 1 层 Embermark
3卡组 Ember Trial Deck收录 10 份 Ember Strike,让起手与每回合抽牌结果保持确定
4玩家 Trial Hero以 Ember Trial Deck 作为起始卡组,提供 60 点生命与 3 点基础能量
5敌人 Trial Dummy预告 3 点 Attack,行动时造成伤害并施加 1 层 Embermark
6遭遇战 Ember Trial连接玩家、敌人、奖励卡组与回合规则,成为场景启动入口

这条依赖链从一套能够启动战斗的场景对象开始,场景初始化完成后,再停用六个预设数据库,只让本轮创建的新数据库保持 Active,后续选择器便不会混入 Demo 内容

1. 初始化战斗场景并切换数据库​

初始化场景对象​

在 Unity 中新建场景,然后打开 Game Card System

Tools > TinyGiants > GCS > Game Card System

点击 Initialize System,GCS 会保留场景中已有的 Main Camera,并创建同级的 GameCardManager、EventSystem、Background、Battle Runtime 与 Battle Fx Directors

展开 Battle Runtime,其中应包含战斗面板、手牌区、各类卡牌区与表现对象,初始化还会在 GameCardManager 上添加 GameCardEncounterBootstrap,并注册六类预设数据库

初始化后的场景 Hierarchy,包含 GameCardManager、EventSystem、Background 与完整 Battle Runtime

为了先排除场景接线问题,可以在 Encounter Bootstrap 中临时选择一个预设遭遇战,进入 Play Mode 确认战斗能够开始,再退出 Play Mode 返回当前场景,随后把内容来源切换到本轮创建的数据库,初始化对象及其职责见战斗场景与系统面板

切换到六个空数据库​

回到 Edit Mode,在 Card、Deck、Player、Enemy、Status 和 Encounter 六个区域中分别点击一次 + New,若项目中没有同名资产,新数据库会使用下列默认名称,已经存在同名资产时,Unity 会自动追加序号,后续始终选择本轮刚创建的对应数据库

区域默认名称
CardNewCardDatabase
DeckNewDeckDatabase
PlayerNewPlayerUnitDatabase
EnemyNewEnemyUnitDatabase
StatusNewStatusDatabase
EncounterNewEncounterDatabase

六个数据库挂载完成后,将每个预设数据库切换为 Inactive,让新数据库保持 Active,每一栏都会显示 1/2 Active

六类数据库均保留预设引用,预设数据库为 Inactive,新数据库为 Active

1/2 Active 表明该栏仍挂载两个数据库,但 Game Card Editor 与 GameCardManager 只枚举启用的数据库,切换 Active 不会删除预设资产,也不会让已保存的直接引用失效,需要对照 Demo 时可以随时重新启用

通过 Tools > TinyGiants > GCS > Game Card Editor 打开 Game Card Editor,依次切换 Card、Deck、Player、Enemy、Status 与 Encounter,六个模式都应读取刚刚启用的新数据库,并显示空列表

Game Card Editor 已选中空的 NewCardDatabase,Card 列表尚无内容

Card 模式此时读取空的 NewCardDatabase,其余五个模式也应显示各自的新数据库与空列表,确认六个模式一致后,使用列表上方的 + 创建新内容,新的资产便会写入当前选中的数据库

2. 从共享状态建立卡牌行为​

先让 Embermark 成为可引用内容​

切换到 Status,确认当前选中的是本轮创建的新数据库,点击列表上方的 + 创建 Embermark

字段值
NameEmbermark
DescriptionMarked by embers.
TypeDebuff
TagsTutorial
IconStatus_Burn
Stack RuleAdditive
Max Stacks9
Decay RuleNever
Show Stack Count开启
Behavior留空,不添加触发器

Embermark 的减益分类、叠层上限、衰减规则与显示设置

Behavior Summary 此时保持 (no triggers),Embermark 在这场战斗中只承担可见、可叠加的标记,不会自行造成伤害,也不会因 Decay Rule = Never 自动减少,保存后,卡牌与敌人的 Change Status 节点便可以选择它,状态字段与行为触发器的完整关系见状态创作

让 Ember Strike 结算伤害与状态​

切换到 Card,确认当前选中的是本轮创建的新数据库,点击列表上方的 + 创建 Ember Strike,先用基础字段确定费用、目标、分类与外观

字段值
NameEmber Strike
DescriptionDeal 6 damage. Apply 1 Embermark.
Cost1
TypeSupport
RarityCommon
TargetSingle Enemy
TagsAttack
Keywords留空
UpgradeNone
IconStudy
TemplateSupport

Support 是卡牌 Type,用于分类并显示在卡面上;Attack 是独立的 Tag,供筛选和自定义规则识别攻击牌;Template = Support 则选择预览与运行时使用的卡牌预制体

Ember Strike 的基础字段、卡牌预览与尚未配置的 Behavior

右上角的 1 Warning 与 Behavior Summary 中的 (no triggers) 都来自空行为图,卡牌基础数据已经完整,但打出后还不会结算,点击 Edit FlowGraph,建立玩法链

On Card Played → Deal Damage → Change Status
节点字段值
Deal DamageTargetOpponent
Amount6
Ignore Armor关闭
Change StatusTargetOpponent
Amount1
ModeDelta
StatusEmbermark

Opponent 会解析为玩家选中的敌人,Deal Damage 将 6 点基础伤害送入伤害结算,Change Status 再增加 1 层 Embermark,玩法结果确定后,添加表现链

Play VFX → Play SFX → Show Floating Text
节点字段值
Play VFXTargetOpponent
AnchorOn Unit
PrefabVFX_BurnIgnite
Lifetime0,自动
Play SFXClipMage2
Volume1
Show Floating TextTargetOpponent
ContentAmount
Amount切换为输入端口,连接 Deal Damage → Dealt
Include Sign开启
Custom Color关闭
Scale1
Duration1
Offset(0, 0, 0)

按照以下顺序把三个表现节点整理为 Play Effect

  1. 将 Show Floating Text 的 Content 设为 Amount,点击 Amount 右侧的小圆点切换为输入端口,再连接 Deal Damage 的 Dealt
  2. 暂时保持三个表现节点未分组,关闭 FlowGraph 窗口,再从 Ember Strike 点击 Edit FlowGraph 重新打开,使 Show Floating Text 根据 Dealt 的直接来源刷新为 Damage 样式
  3. 选中三个表现节点并按 Ctrl + G,此时 Dealt 数据连线会自动保留为 Group 边界端口
  4. 将默认的 Group 重命名为 Play Effect,双击进入组,再点击需要显示在外层的参数标签,暴露 Prefab、Clip、Include Sign、Custom Color、Scale 与 Duration
  5. 返回父图,把 Change Status 的流程输出连接到 Play Effect 的流程输入
截图中的静态 Amount

两张 FlowGraph 截图记录的是静态 Amount = 6 与 Amount = 3 布局,这两个数值分别对应卡牌与敌人 Deal Damage 的基础值

当前编辑器不再手动选择 Kind,按上述步骤新建时,画布会比截图多出一条 Deal Damage → Dealt 数据连线,Amount 也会读取扣除护甲和 Hook 修正后的实际伤害

Ember Strike 的完整 FlowGraph,玩法结算后进入 Play Effect 表现组

从 On Card Played 到 Play Effect 的路径已经完整连接,这张牌现在能够完成伤害、状态与表现结算,节点连接、Group 参数暴露与实际结算值的处理见流图编辑器,下一步则要把它加入卡组,让玩家能够在战斗中抽到

3. 把卡牌交给玩家,再补齐对手​

卡组把可执行卡牌变成抽牌来源​

切换到 Deck,点击列表上方的 + 创建 Ember Trial Deck,再把 Ember Strike 的 Copies 设为 10

字段值
NameEmber Trial Deck
DescriptionTen Ember Strikes for the second-battle tutorial.
Tags留空
IconDeck_Warrior_Start
CardsEmber Strike × 10

Ember Trial Deck 包含一种卡牌与十份 Ember Strike

1 cards · 10 copies 表示卡组只有一个唯一卡牌条目,但共有十张运行时卡牌,本场起手抽 5 张、下一回合再抽 5 张时都只会得到 Ember Strike,卡组条目、Copies 与抽牌来源见卡组创作,这副卡组还需要成为玩家的 Starting Deck 才会真正进入战斗

玩家把卡组带入战斗​

切换到 Player,点击列表上方的 + 创建 Trial Hero,并在 Deck 区域选择刚刚完成的 Ember Trial Deck

区域字段值
BasicNameTrial Hero
DescriptionA tutorial player with a guaranteed Ember Strike draw.
Tags留空
VisualIconAvatar
TemplatePrefab
AttributesBase HP60
Base Energy3
DeckStarting DeckEmber Trial Deck
EnergyNameEnergy
Descriptiontutorial energy
IconEnergy

Trial Hero 具有 60 点生命、3 点基础能量,并使用 Ember Trial Deck

玩家预览、60 HP · 3 Energy 与十张卡牌的起始卡组共同完成了玩家侧配置,Starting Deck 决定实际进入战斗的牌库,Energy 区域只定义资源在界面中的名称、说明与图标,相关字段的完整说明见角色创作

敌人用意图绑定预告与行动​

战斗还需要一个能够预告并执行行动的对手,切换到 Enemy,点击列表上方的 + 创建 Trial Dummy,先配置生命、强度层级与表现资产

字段值
NameTrial Dummy
DescriptionA predictable tutorial enemy.
TierNormal
Tags留空
IconAvatar
TemplatePrefab
HP Min24
HP Max24

Trial Dummy 的基础字段已经完成,Behavior 与 Intents 尚未配置

当前的 24 HP 与角色预览只确定敌人的基础数据和外观,Behavior Summary 与 Intents 仍然为空,点击 Edit FlowGraph,用 Leaf Intent 把 Attack 预告与敌人回合实际执行的路径绑定在一起

On Enemy Behavior Start → Leaf Intent(Attack)→ Deal Damage → Change Status
节点字段值
Leaf IntentIntentAttack
Deal DamageTargetOpponent
Amount3
Ignore Armor关闭
Change StatusTargetOpponent
Amount1
ModeDelta
StatusEmbermark

战斗开局会沿这条路径解析 Leaf Intent,并从后续 Deal Damage 提取数值 3,作为 Full 模式的 Attack 预告,敌人回合到来时,GCS 再执行已经规划的叶节点路径,对 Trial Hero 造成 3 点伤害并施加 1 层 Embermark

表现链会沿用卡牌已经建立的组织方式,只替换敌人的命中特效、音效与飘字数值

Play VFX → Play SFX → Show Floating Text
节点字段值
Play VFXTargetOpponent
AnchorOn Unit
PrefabVFX_ImpactHit
Lifetime0,自动
Play SFXClipHit002
Volume1
Show Floating TextTargetOpponent
ContentAmount
Amount切换为输入端口,连接 Deal Damage → Dealt
Include Sign开启
Custom Color关闭
Scale1
Duration1
Offset(0, 0, 0)

将 Deal Damage → Dealt 接入飘字的 Amount 后,暂时保持三个表现节点未分组,关闭 FlowGraph 窗口,再从 Trial Dummy 点击 Edit FlowGraph 重新打开,将三个表现节点封装为 Play Effect

双击进入组并暴露 Prefab、Clip、Scale 与 Duration,Dealt 连线会自动形成 Amount 边界端口;Include Sign 与 Custom Color 保持组内配置,返回父图后,把 Change Status 的流程输出接入该组,飘字便会使用实际伤害值

Trial Dummy 的完整 FlowGraph,Attack 意图连接伤害、状态与 Play Effect

至此,Leaf Intent 与后续伤害、状态和表现节点已经处于同一条路径,Trial Hero 与 Trial Dummy 也分别具备开局所需的卡组、属性和行为,敌人意图与行为图的更多组合见敌人创作与常用敌人模式,双方内容就绪后便可以由 Encounter 汇总整场战斗

4. 由 Encounter 汇总整场战斗​

切换到 Encounter,点击列表上方的 + 创建 Ember Trial,将前面完成的玩家、敌人和卡组分别放入 Player、Enemy Units 与 Reward Deck,再配置起手、抽牌、能量和回合规则

区域字段值
BasicNameEmber Trial
DescriptionA complete second-battle tutorial encounter.
DifficultyNormal
Tags留空
VisualIconBackground,在初始化出的战斗场景中作为战斗背景显示
PlayerPlayerTrial Hero
Enemy UnitsEnemy UnitsTrial Dummy × 1
Reward DeckReward DeckEmber Trial Deck
Battle RulesStarting Hand Size5
Draw Per Turn5
Max Hand Size10
Starting Energy0
Card Reward Count3
Armor DecayResetOnTurnStart
Hand DiscardDiscardOnTurnEnd
Enemy Intent DisplayFull
Animation Gap0.28 秒

这组规则中有四项容易因字段名称而产生误解:

  • Starting Energy = 0 表示 Encounter 不覆盖玩家的基础能量,运行时会回退到 Trial Hero 的 Base Energy = 3,因此 Play Mode 开局仍然显示 3/3

  • Full 会保留意图图标与可计算数值,所以这条敌人行为会显示数值为 3 的 Attack,IconOnly 会隐藏数值,Hidden 会隐藏全部意图

  • Card Reward Count = 3 是候选数量上限,Ember Trial Deck 只有一个唯一条目 Ember Strike × 10,奖励抽取不会重复选择同一条目,因此本场获胜时最多只能生成一个卡牌候选

  • Animation Gap 会随 Encounter 保存,但当前运行时尚未读取这个字段,因此 0.28 不会改变节点执行或阶段推进的间隔

Ember Trial 已连接 Trial Hero、Trial Dummy、奖励卡组与完整战斗规则

Lineup 此时显示 Trial Hero 对阵 Trial Dummy,Battle Rules 摘要也对应 Hand 5、Draw 5、Hand Max 10、Energy 0、Reward 3 与 Intent Full,双方阵容、奖励来源与战斗规则已经完整,最后,选择 GameCardManager,在 Encounter Bootstrap 中指定 Ember Trial,并开启 Auto Start On Play

Encounter Bootstrap 已选择 Ember Trial,并显示 Ready — starts on Play

绿色状态 Ready — starts on Play 表明 Ember Trial 位于当前激活的 Encounter Database 中,Auto Start On Play 也已经开启,进入 Play Mode 时,Bootstrap 会把这个 Encounter 交给 GameCardManager 启动,Encounter 的阵容、规则与奖励边界见遭遇战创作,场景自动启动与代码入口见战斗启动

5. 在 Play Mode 验证完整战斗​

进入 Play Mode,开局画面应对应前面配置的玩家、敌人、卡组、能量规则与意图显示,Trial Hero 为 60/60,Trial Dummy 为 24/24,能量为 3/3;画面中还应有 5 张 Ember Strike 手牌、5 张抽牌、0 张弃牌,以及敌人上方数值为 3 的 Attack

Ember Trial 的开局状态,玩家、敌人、手牌、能量与 Attack 3 意图均已建立

五张同名手牌来自十份 Ember Strike,Attack 3 来自敌人已经解析的 Leaf Intent → Deal Damage 路径,这些开局结果成立后,点击一张 Ember Strike,卡牌的 Single Enemy 目标模式会进入选敌状态,战场变暗,红色箭头指向 Trial Dummy,目标周围出现白色角标

Ember Strike 正在选择 Trial Dummy,目标箭头与选中角标已经出现

遮罩、箭头与角标出现时,点击 Trial Dummy 确认目标,On Card Played 会沿伤害、状态与表现组完成整条卡牌路径

Ember Strike 结算后,能量降至 2,敌人为 18/24,并获得 1 层 Embermark

结算完成后,能量从 3 降到 2,手牌从 5 张变为 4 张,弃牌堆从 0 变为 1,敌人生命从 24 降到 18,状态栏出现 1 层 Embermark,费用、目标、伤害、状态与牌堆移动应在同一次出牌中生效

点击 End Turn,DiscardOnTurnEnd 会把剩余 4 张手牌移入弃牌堆,Trial Dummy 随后执行 Attack 3,对玩家造成 3 点伤害并施加 1 层 Embermark,行动完成后,系统先解析下一次 Attack 3,再进入第二个玩家回合,补满 3 点能量并抽取剩余 5 张卡牌

敌人行动结束并进入第二回合,玩家为 57/60,双方各有 1 层 Embermark,能量与手牌已经刷新

第二个玩家回合开始时,Trial Hero 变为 57/60,并带有 1 层 Embermark,对应敌人刚刚执行的伤害与状态路径,此时能量恢复为 3/3,手牌、抽牌堆与弃牌堆依次为 5、0、5,而敌人身上先前施加的 Embermark 仍保持 1 层,也与 Decay Rule = Never 和空 Behavior 完全一致

最后检查 Console,若没有 GCS 报错,说明数据库激活、内容引用、两张 FlowGraph、Encounter 汇总和 Bootstrap 启动均已通过验证

至此,数据库激活、内容引用、两张 FlowGraph、Encounter 汇总与 Bootstrap 启动都已经得到可见结果,恭喜你已经完成了第一个完整的战斗场景的制作

抽牌、弃牌、敌方阶段与下一回合的完整推进顺序见战斗循环