跳到主要内容

遭遇战创作

GCS · Authoring

遭遇战定义一场可启动战斗:一个玩家单位、一列有序敌人、一个奖励卡组,以及一组战斗规则。

适用于在 Workbench 中组装战斗的开发者。玩家单位或敌人尚未完成时,先创建对应资产,再配置遭遇战。

遭遇战(encounter)是战斗的启动入口。它为一场可玩的战斗选定玩家单位、敌人阵容、奖励卡组、难度标签和战斗规则。卡牌、状态和行为通过这些引用间接进入战斗,因此配置遭遇战的核心是建立正确引用:

Workbench > Encounter 中创作遭遇战:

Workbench 的 Encounter 模式:左侧是遭遇战列表,中间检视器里是 Player / Enemy Units / Reward Deck / Battle Rules 区域,右侧预览显示阵容和规则 chip


创作顺序

  1. 填写 NameDescriptionDifficultyTagsIcon
  2. 选择一个 Player Unit
  3. 添加一个或多个 Enemy Units
  4. 如果这场战斗提供卡牌奖励,指定 Reward Deck
  5. 调整 Battle Rules
  6. 确认遭遇战位于场景 GameCardManager 上已启用的遭遇战数据库里。
  7. 把它指给 GameCardEncounterBootstrap,或在代码里用 GCSApi.StartBattle 启动。

只有当某个场景或代码路径可以启动它时,遭遇战才算完成。没有被任何场景、bootstrap 或代码引用的遭遇战,只是草稿资产。


身份字段

BasicVisual 两个折叠区放的是描述遭遇战、而不改变玩法的字段:

字段含义
Name显示名称。非空时,Workbench 会顺带把底层资产也改成同名。
Description遭遇战预览里展示的、面向玩家的简介。
Difficulty一个标签,例如 NormalEliteBoss,默认 Normal。下拉框会列出项目里已经用过的值,也可以直接输入自定义值。
Tags自由标签,用于过滤和项目内的分组。
Icon战斗横幅或预览图,在列表和预览里以 16:9 缩略图显示。

Difficulty 是标签,不是规则集。把遭遇战标成 Boss,只会改变编辑器中的 chip 显示,以及项目 UI 对该字符串的处理。实际难度来自敌人阵容和战斗规则。


选定玩家

Player 区域只放一个玩家单位。卡片上直接标着该单位的 HP 和基础能量。双击卡片可以换人,也可以用跳转按钮在 Player 模式里打开当前单位。

选择玩家单位会同时决定基础 HP、基础能量、初始卡组、能量显示名称与图标,以及表现层 prefab。

开局卡不对?先查卡组

战斗开局卡牌不符合预期时,优先检查所选玩家单位指向的初始卡组。


组装敌人阵容

Enemy Units 是一个带编号槽位的有序列表。每个槽位显示该敌人的层级(tier)和 HP 区间。用 Add Enemy Unit 添加槽位,拖动行可以重排,跳转按钮能在 Enemy 模式里打开任意一个敌人。

顺序在运行时起两次作用:敌人按列表顺序入场,也按列表顺序在敌方回合行动。把需要玩家优先识别的敌人放在前面,并明确行动顺序。

槽位放的是引用,不限份数,同一个敌人资产可以占多个槽。演示项目的 Elite 战斗正是这么搭的:Field of Burning Effigies 用两个 Strawman 槽位挡在一个 Pyre Effigy 前面。

遭遇战至少需要一个敌人。空阵容会触发校验 Error,并在检视器中标出。测试新规则时先只放一个敌人,核心循环验证通过后再增加多敌人压力。

The Threshing Field 就是这个形态的成品版:Squire 对阵单个 Strawman,奖励来自 Spoils of Battle。

Workbench Encounter 模式中的 The Threshing Field:玩家是 Squire,阵容只有一个 Strawman 槽位,奖励卡组是 Spoils of Battle,预览里排着战斗规则 chip


奖励卡组

Reward Deck 区域选定胜利界面抽取奖励的卡池。卡片会显示该卡组的总卡数和平均费用;奖励池过小可以在进入 Play Mode 前发现。

卡组引用本身决定胜利后有没有卡可发:

设置胜利后的结果
已指定 Reward Deck 且里面有卡胜利界面从中抽出候选卡,数量由战斗规则里的 Card Reward Count 决定。
Reward Deck 缺失或为空没有任何候选卡。无奖励遭遇战使用该配置。

Card Reward Count 不能关闭卡牌奖励。运行时会把小于 1Card Reward Count1 处理;只要指定了有卡的奖励卡组,胜利后至少提供一张候选卡。候选卡抽取规则见战斗规则

演示项目里,每个职业线的三场遭遇战共用一个奖励卡组,比如 Warrior 线的奖励全部来自 Spoils of Battle。


战斗规则

Battle Rules 折叠区存放这场遭遇战专属规则:抽牌数量、手牌上限、能量覆盖、奖励数量、护甲与手牌保留规则、意图显示、动画节奏。预览列会把整套规则显示为 chip(Hand 5Draw 5Energy 0 等),不展开折叠区也能读取遭遇战节奏。

每个字段的详细说明见战斗规则


参考演示遭遇战

演示项目包含十二场遭遇战,每个职业三场,全部沿用默认战斗规则。难度曲线来自阵容和敌人行为图。创建自定义遭遇战前,可以先参考这些内容:

遭遇战职业线阵容难度
The Threshing FieldWarrior(Squire,HP 70,能量 3)1 个 Strawman(HP 14-18)Normal
Fenmoss HollowHunter(Scout,HP 70,能量 3)1 个 Plague Stalker(HP 14-18)Normal
Pyre of the Ash-KingMage(Archmage,HP 100,能量 4)1 个 Ashen Hierarch(HP 200-240)Boss

每条职业线内部的规律是:Normal 使用单个弱敌帮助玩家熟悉职业,Elite 使用三槽位阵容,Boss 使用高 HP 敌人并通过行为图提供压力。在 Encounter 模式中打开任意一场,先阅读预览 chip,再修改配置。


启动遭遇战

在战斗场景的 GameCardManager 对象上添加 GameCardEncounterBootstrap(该组件依赖 manager),然后设置:

字段含义
Default Encounter这个场景要启动的遭遇战。
Auto Start On Play开启时(默认开启),进入 Play Mode 立即开战。
On Bootstrap战斗启动后立刻触发的 UnityEvent。

按下 Play 后没有战斗时,先查看 Console:Default Encounter 为空或场景中没有 GameCardManager 实例时,bootstrap 都会记录警告。


校验

Encounter 模式会在 Play Mode 之前把关键问题查出来:

检查项级别
缺少 Player UnitError
没有分配敌方单位Error
缺少 Reward DeckWarning
Difficulty 为空Warning

缺少奖励卡组是 Warning 而不是 Error,因为无奖励的遭遇战本身是合理设计:不指定卡组,胜利界面就不会提供任何卡。把 Card Reward Count 设成 0 起不到同样的效果,只要卡组里有卡,运行时仍会提供一张候选卡。实际开关是卡组引用。


常见错误

症状可能原因
按下 Play 后没有战斗Auto Start On Play 关闭、Default Encounter 为空,或场景中没有 GameCardManager。后两种情况 bootstrap 会记录警告。
战斗开局的卡牌不对遭遇战的玩家单位指向了另一个初始卡组。
没有敌人出现Enemy Units 列表为空,或某个槽位的引用丢了。
奖励界面是空的Reward Deck 缺失,或者里面没有卡。
Card Reward Count 是 0,胜利后却仍有卡只要指定了有卡的奖励卡组,运行时至少提供一张候选卡。想一张都不给,就清空 Reward Deck。
意图显示和预期不同Enemy Intent Display 规则设成了 HiddenIconOnly