遭遇战快速上手
把玩家单位、敌人阵容、奖励卡组和战斗规则组装进一个遭遇战资产,在 Play Mode 中启动它。
适用于玩家、卡组、卡牌和敌人都已配置完成,现在需要用遭遇战把它们组合成可运行战斗的开发者。遭遇战(encounter)是运行时启动的战斗资产。卡牌、状态、卡组和单位只有被某个遭遇战间接或直接引用后,才会进入可玩的战斗流程。本文构建一场遭遇战,并完成启动验证。
第 1 步:打开 Encounter 模式
打开 Workbench,切到 Encounter 标签:
Tools/TinyGiants/GCS/Game Card Editor
左侧一栏列出场景 GameCardManager 上已注册 encounter database 中的遭遇战。列表为空时,先在 manager 上激活一个 encounter database。
预置数据库激活后,列表中应显示 12 场 demo 遭遇战,并标有 Normal、Elite 或 Boss。选中一场后,inspector 会显示下面要处理的区块:

第 2 步:创建遭遇战并命名
用 + 新建一场遭遇战,或用 ⧉ 复制一场已经能正常启动的 demo 遭遇战再改。然后填 Basic 和 Visual 区块:
| 字段 | 建议 |
|---|---|
| Name | 显示在编辑器列表里;如果你自己做遭遇战选择 UI,也会用到。 |
| Description | 简短的风味描述或创作备注。 |
| Difficulty | 自由填写的标签。demo 用 Normal、Elite、Boss,选一个或自己输入。 |
| Tags | 可选标签,用于筛选或流程逻辑。 |
| Icon | 可选的战斗横幅或预览图。 |
Difficulty 只是显示和分组标签。手牌数、抽牌数、能量、奖励全部来自 Battle Rules 区块,和该字符串无关。
到这里,inspector 顶部应该显示你的名字和难度标签,下方的 Player 区块仍然提示需要一个玩家单位。
第 3 步:选择玩家
在 Player 区块选择一个 HP、能量、卡组、prefab 都已配置好的玩家单位(这些字段在 Player 模式中对应 Base HP、Base Energy、Deck 区块和 Template)。这里最重要的是卡组:单位如果指向了错误卡组,新卡不会出现在战斗中,即使战斗本身能正常启动。
选好之后,Player 区块应该显示这个单位的卡片和摘要,比如 demo 猎人 Scout 的 HP 70 · Energy 3,"Player Unit is required" 的提示随之消失。
第 4 步:添加敌方单位
按 Add Enemy Unit,至少选一个敌人。先只放一个;等单敌人战斗能启动、能预告意图、能正常结算回合之后再加。
这个列表是有序的:每个条目占一个编号槽位,行可以拖拽排序,demo 战场按槽位顺序摆放敌人。做多敌人阵容时要有意识地安排顺序。
你应该能看到敌人坐在 1 号槽位上,带着它的等级和 HP 区间,比如 demo 的 Plague Stalker 显示 Normal · HP 14-18。
第 5 步:选择奖励卡组
Reward Deck 是胜利卡牌奖励的来源。获胜时,奖励界面从这个卡组里随机抽卡:副本数越多的条目越容易被抽中,同一轮里同一张卡不会出现两次。第一次测试直接复用 demo 的奖励卡组;猎人场景用的是 Wild Harvest。
没有奖励卡组的遭遇战也可以正常结束,但胜利界面不会提供卡牌奖励。
第 6 步:设置战斗规则
Battle Rules 区块定义这场遭遇战的玩法规则。下表默认值也是代码默认值,demo 战斗使用同样数值。首次验证可以保持默认。
| 规则 | 默认值 | 含义 |
|---|---|---|
| Starting Hand Size | 5 | 战斗开始时抽的牌数。 |
| Draw Per Turn | 5 | 第一回合之后,每个回合开始时抽的牌数。 |
| Max Hand Size | 10 | 手牌硬上限。超出上限的抽牌直接进弃牌堆。 |
| Starting Energy | 0 | 0 表示用玩家单位的 Base Energy 作为每回合能量,大于 0 则在这场遭遇战里取代它。 |
| Card Reward Count | 3 | 胜利界面从奖励卡组里提供几张卡。配了奖励卡组时,运行时至少提供 1 张。 |
| Armor Decay | ResetOnTurnStart | 护甲在回合开始时清零,还是跨回合保留。 |
| Hand Discard | DiscardOnTurnEnd | 手牌在回合结束时弃掉,还是带进下回合。 |
| Enemy Intent Display | Full | Full 显示意图和数值,IconOnly 只显示图标,Hidden 什么都不显示。 |
| Animation Gap | 0.28 | 结算步骤之间的间隔秒数。 |
这些规则会直接影响玩家体验。已有规则应在该区块中设置,不要把同样行为写入外部代码,避免编辑器中不可见。
所有区块填完后,inspector 应能按顺序说明这场战斗:身份、玩家、阵容、奖励和规则。
Demo 猎人线的第一场 Fenmoss Hollow 读起来正是这样:

第 7 步:启动遭遇战
- Bootstrap 组件
- C# API
不需要代码启动时,使用 GameCardEncounterBootstrap。它和 GameCardManager 挂在同一个 GameObject 上,进入 Play Mode 时自动开战。
| 字段 | 第一次测试的值 |
|---|---|
| Default Encounter | 你刚创建的遭遇战。 |
| Auto Start On Play | 启用(默认就是启用)。 |
Auto Start On Play 开启但 Default Encounter 为空时,bootstrap 只会记录一条警告并跳过启动。进入 Play Mode 后没有战斗时,先检查该字段。
如果战斗流程由项目自己的系统控制,则使用 API 启动:
using UnityEngine;
using TinyGiants.GCS.Runtime;
public sealed class EncounterStarter : MonoBehaviour
{
[SerializeField] private GameEncounter encounter;
private void Start()
{
GCSApi.StartBattle(encounter);
}
}
两条路径最终都会启动同一场战斗。按项目流程选择其中一种。
按下 Play。战场应完成初始化:玩家生成,敌人生成,起手手牌展开。
第 8 步:验证战斗
以下各项全部成立,遭遇战才算配好:
- 选中的玩家出现,卡组和 HP 符合预期。
- 列表里的每个敌人都生成,HP 落在各自配置的区间内。
- 起始手牌数量等于 Starting Hand Size。
- 能量等于 Starting Energy;规则为
0时等于玩家的 Base Energy。 - 显示规则允许时能看到意图图标。
- 结束回合会执行敌方行动。
- 胜利时出现奖励界面;配了奖励卡组时有卡可选。
- Console 里没有 missing database、missing prefab 或 null encounter 错误。
常见错误
| 症状 | 可能原因 |
|---|---|
| 进了 Play Mode 却没有战斗 | Bootstrap 上的 Default Encounter 为空,或 Auto Start On Play 被关掉了。 |
| 战斗用了错误的玩家开局 | 遭遇战指向了复制出来的或过期的玩家单位。 |
| 新卡从不出现 | 玩家单位挂的卡组不是你编辑的那个卡组。 |
| 没有敌人出现 | Enemy Units 列表为空,或槽位引用了已删除的敌人资产。 |
| 胜利后没有卡牌奖励 | Reward Deck 缺失或没有条目。 |
| 第一回合抽牌数量不符合预期 | Starting Hand Size、Draw Per Turn 和 Max Hand Size 设置冲突;超出上限的抽牌会被弃掉。 |