刷怪系统为什么要有导演
很多个人游戏一开始把敌人直接摆在关卡里,或者每隔几秒生成一只。这样实现快,但战斗节奏很容易失控:玩家刚进房间就被背后刷怪,低血量时继续被压制,敌人堆在门口,低配机器掉帧,或者刷出的敌人没有形成有趣组合。
刷怪导演的目标是控制压力。它决定什么时候刷、在哪里刷、刷什么、刷多少、是否暂停、何时结束。好的导演系统能让战斗看起来有变化,但仍遵守规则。
刷怪点设计
刷怪点不是随便放在地图角落。每个刷怪点要记录:
| 字段 | 说明 |
|---|---|
spawn_id | 稳定 ID |
room_id | 所属区域 |
tags | 近战、远程、精英、伏击 |
visibility | 是否在玩家视野内 |
safe_distance | 离玩家最小距离 |
path_valid | 是否能走到玩家 |
max_active | 同点最大活跃数 |
不要在玩家视野内凭空刷敌人,除非有传送、钻地、门开启等表现。刷怪点要通过导航测试,刷出的敌人必须能参与战斗,而不是卡在墙后。
波次表
波次表比硬编码更好维护:
| 波次 | 条件 | 敌人 | 结束条件 |
|---|---|---|---|
| 1 | 玩家进入房间 | 3 个近战 | 全灭或 30 秒 |
| 2 | 波次 1 结束 | 2 近战 + 1 远程 | 全灭 |
| 3 | 玩家血量高于一半 | 1 精英 | 精英死亡 |
波次可以有条件。玩家已经低血量时,可以延后精英或提供补给。导演系统不是简单增加难度,而是让压力曲线合理。
压力值
可以给敌人设置压力成本:
| 敌人 | 成本 |
|---|---|
| 小近战 | 1 |
| 远程 | 2 |
| 盾兵 | 3 |
| 精英 | 5 |
| Boss 召唤物 | 视阶段 |
每个房间有压力上限。导演刷怪前检查当前活跃压力,不超过上限再刷。这样可以避免同时生成太多高威胁敌人。
压力值还可以和性能预算结合。敌人越多,AI、动画、特效成本越高。压力上限既是难度上限,也是性能上限。
玩家位置和视线
刷怪位置要考虑玩家当前视线。背后刷怪很危险,除非游戏明确是恐怖或伏击设计。普通动作游戏更适合在门、通道、召唤阵、屏幕边缘有表现地刷敌人。
规则:
- 不在玩家极近距离生成。
- 不在玩家正盯着的空地突然出现。
- 刷出后能在合理时间接近玩家。
- 远程敌人有可见位置,不隔墙攻击。
- 低血量时避免背后高伤害刷怪。
这些规则能让玩家觉得战斗公平。
动态调整要克制
刷怪导演可以根据玩家表现调整,但不要过度。玩家打得好,可以提前下一波或加入精英;玩家状态差,可以延后或减少压力。但调整要有上限,不能让玩家感觉系统作弊。
可用信号:
| 信号 | 用途 |
|---|---|
| 玩家血量 | 控制压力 |
| 战斗时长 | 判断是否拖沓 |
| 活跃敌人数量 | 控制性能 |
| 玩家位置 | 选择刷怪点 |
| 资源剩余 | 是否给补给 |
不要根据玩家刚拿到强武器就立刻刷克制敌人,这会显得针对。
刷怪和奖励
刷怪系统要和奖励系统配合。波次结束后掉落奖励、打开门、刷新商店、推进任务。奖励不应由每个敌人随意决定,否则波次节奏会乱。
常见做法:普通敌人给小掉落,波次完成给主要奖励。这样玩家清楚“打完这一波有进展”。
性能和清理
导演要控制活跃敌人数量。远处离战斗无关的敌人可以休眠或不生成。死亡敌人、掉落物、特效要按规则清理。不要让每波战斗残留大量尸体和粒子。
性能日志可以记录每个房间最高活跃敌人数、AI 时间、帧率低点。战斗问题常常和刷怪密度相关。
调试工具
内部构建显示:
- 当前波次。
- 当前压力值。
- 可用刷怪点。
- 下一波敌人。
- 暂停原因。
- 活跃敌人列表。
这些信息对调节战斗节奏很重要。没有调试面板,只靠试玩很难知道导演为什么不刷或刷太多。
QA 清单
| 测试 | 检查 |
|---|---|
| 进入房间 | 第一波触发正确 |
| 玩家低血量 | 压力是否仍合理 |
| 跑到角落 | 刷怪点是否有效 |
| 远程敌人 | 是否有可见射线 |
| 波次结束 | 门、奖励、任务推进 |
| 低配机器 | 高峰帧率 |
| 读档 | 波次状态恢复或重置 |
发布后调参
玩家反馈战斗太难时,不要只降低敌人血量。先看刷怪点、波次间隔、压力上限、远程敌人比例。很多难度问题来自敌人组合和出现位置,而不是单体数值。
补丁说明可以写具体:“减少第二章工厂房间的远程敌人同时出现数量”,比“降低难度”更有信息量。
最终检查清单
- 刷怪点有标签、距离、视线和导航信息。
- 波次表记录条件、敌人和结束条件。
- 敌人有压力成本,房间有压力上限。
- 刷怪位置遵守玩家视线和安全距离。
- 动态调整克制且有上限。
- 波次奖励和任务推进统一处理。
- 活跃敌人、尸体和特效有清理规则。
- 内部调试能显示波次和压力。
刷怪导演系统让战斗从“堆敌人”变成“控节奏”。个人 Steam 游戏只要把压力、位置和奖励管好,就能让有限敌人组合出更稳定的战斗体验。
刷怪点的可视化验收
内部构建最好能显示所有刷怪点:颜色表示类型,数字表示压力成本,线段表示可到达路径。关卡设计时一眼就能看到某个房间是否只有远程点、是否有刷怪点离玩家入口太近、是否有点位被新墙体挡住。
刷怪点可视化也适合截图归档。每个战斗房间留一张调试截图,后续改关卡时能对照。否则关卡改了半个月后,很难记得原本的刷怪意图。
波次失败保护
波次系统要处理异常:敌人掉出地图、卡在门外、玩家离开房间、任务状态变化。可以设置波次超时和敌人有效性检查。超时后不要直接刷下一波,而是判断剩余敌人是否可达,必要时清理或传送回有效区域。
这类保护能避免玩家找不到最后一只敌人而无法开门。日志中记录“波次因超时清理敌人”,方便后续修关卡。
不同难度的导演配置
难度可以改变压力上限、波次间隔、精英出现条件和补给频率。不要只改敌人血量。简单难度可以减少同时远程敌人,困难难度可以缩短波次间隔,但刷怪位置和可读性规则仍应保持公平。
每个难度都要跑代表房间。普通难度稳定,不代表困难难度的敌人组合不会失控。
Demo 中的导演策略
Demo 前几场战斗要更保守,先让玩家理解敌人类型和操作,再展示复杂组合。导演系统可以在 Demo 构建中使用较小压力上限,避免玩家还没学会系统就被围攻。结束前再安排一场节奏完整的战斗,让玩家看到正式版潜力。
刷怪和存档
战斗中途能否存档要谨慎。如果允许,存档需要记录当前波次、已生成敌人、剩余敌人、刷怪点冷却和奖励状态。否则读档后可能重复刷怪或直接开门。更简单的策略是在战斗房间开始前和结束后保存,中途只允许检查点恢复。
如果是长战斗或生存模式,必须支持中途恢复,就要把导演状态作为正式存档数据,而不是只保存玩家位置。
敌人组合库
导演可以使用组合库,而不是每次单独选择敌人。组合库记录一组敌人的角色:近战压迫、远程骚扰、护盾保护、精英核心。这样战斗更有设计感,也更容易平衡。
组合库示例:
| 组合 | 内容 | 用途 |
|---|---|---|
melee_intro | 3 小近战 | 教基础攻击 |
ranged_cover | 2 近战 + 1 远程 | 教优先级 |
shield_push | 1 盾兵 + 2 小怪 | 教破盾 |
组合比纯随机更适合 Demo 和关键关卡。
导演系统的复盘指标
记录每场战斗时长、最高活跃压力、玩家死亡原因、剩余资源、波次超时次数。通过这些指标,可以判断战斗是拖、难、乱还是太空。导演系统调参要看节奏,不只是看敌人数量。
调参表的版本管理
刷怪导演的配置要进入版本管理。每次改压力上限、刷怪间隔、敌人组合,都写清楚原因。不要在发布前临时改一串数字却没有记录,否则玩家反馈变差时很难回滚。
配置表可以保留注释字段,例如“该波次用于测试盾兵绕后”“该房间不使用远程精英”。这些注释不会影响运行,却能帮助后续维护。个人项目人少,更需要让表格自己说明设计意图。
和关卡锁门逻辑的衔接
很多战斗房间会在波次开始时锁门,结束后开门。导演系统应只负责战斗状态,不要直接到处调用门、任务、音乐和奖励。更好的做法是发出事件:战斗开始、波次结束、战斗完成、战斗失败。门和任务系统订阅这些事件。
这样做能减少后期补丁风险。某个房间要改成不锁门时,只调整关卡事件绑定,不需要改导演核心逻辑。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。