Steam 游戏 AI 行为实战:2021 年 5 月个人项目如何做敌人状态、感知与调试

面向个人游戏开发者的 AI 行为教程,覆盖状态机、感知、巡逻、追击、攻击、脱战、调试绘制、性能和 Steam Demo 前测试。

AI 的目标是可读和可靠

个人游戏里的 AI 常常被误解为越聪明越好。实际上,大多数 Steam 玩家希望敌人行为可读、可预测但不死板。玩家需要理解敌人为什么发现自己、为什么追击、什么时候攻击、如何脱战。如果 AI 过于随机或状态不清,玩家会觉得不公平。

个人项目更适合从清楚的状态机开始,而不是一上来做复杂行为树。巡逻、警觉、追击、攻击、搜索、返回,这几个状态足以支撑很多类型。关键是每个状态有进入条件、退出条件和调试方式。

基础状态机

一个常见敌人状态:

状态行为退出条件
Patrol按路径巡逻看到或听到玩家
Alert朝可疑点观察确认玩家或超时
Chase追击玩家进入攻击距离或丢失目标
Attack执行攻击攻击结束
Search搜索最后位置超时或重新发现
Return返回巡逻点到达路径

状态切换要写日志或可视化。比如敌人从 Patrol 进入 Chase 时,记录触发原因是视野还是声音。这样玩家反馈“敌人隔墙发现我”时,开发者能判断是射线检测、声音范围还是状态残留。

感知系统要有规则

敌人发现玩家通常来自视野、声音、距离、脚印或脚本触发。每种感知都要有清楚规则:

感知参数
视野角度、距离、遮挡检测、反应时间
声音半径、衰减、事件类型
距离近距离强制发现或警觉
脚印持续时间、路径点
剧情触发只在特定任务阶段

不要让敌人“凭空知道”。如果 AI 可以通过声音发现玩家,玩家就需要声音反馈或教程;如果敌人视野被墙挡住,就不应该发现玩家。规则越清楚,玩家越愿意承担失败。

调试绘制

AI 调试绘制非常有用。内部构建中可以显示:

  • 当前状态。
  • 视野扇形。
  • 听觉范围。
  • 当前目标点。
  • 巡逻路径。
  • 最后看到玩家的位置。
  • 攻击范围。

这些信息不进入发行版,但能大幅提高排查效率。敌人行为问题通常很难只靠文字描述,看到状态和范围后,问题会直接很多。

巡逻和导航

巡逻路径要服务关卡,不只是让敌人走动。巡逻点要考虑玩家观察、躲避、绕行和时机。敌人转身太突然、路径太短、卡在门口,都会影响体验。

导航测试包括:

测试预期
正常巡逻不撞墙,不抖动
追击玩家能绕过常见障碍
玩家上高台敌人有合理处理
门开关变化路径能更新或降级
读档恢复敌人回到正确状态

如果导航系统不稳定,可以先限制敌人活动区域,而不是让它在全地图自由寻路。范围越大,边缘问题越多。

攻击行为的节奏

敌人攻击要有预警、执行、恢复。不要让敌人一进范围就瞬间命中。攻击参数包括:

参数作用
前摇给玩家反应时间
有效帧真正造成伤害
后摇玩家反击窗口
冷却防止连续压制
朝向锁定决定是否能被绕背

这些参数要和战斗反馈配合。敌人 AI 不是只决定何时攻击,还要让攻击被玩家读懂。

脱战和搜索

敌人丢失玩家后,不应该马上忘记,也不应该一直追到天涯海角。搜索状态可以让行为更自然:敌人去最后看到的位置,停留几秒,检查附近,然后返回巡逻。

脱战规则要避免两种极端:玩家刚躲进掩体敌人立刻忘记,或者玩家跑很远敌人仍然准确追踪。规则可以按视野丢失时间、距离和关卡区域判断。

性能控制

AI 很容易造成 CPU 压力,尤其是敌人多时。优化方向包括:

  • 降低远处敌人更新频率。
  • 分帧处理感知检测。
  • 避免每帧全地图搜索。
  • 缓存路径结果。
  • 非激活区域暂停 AI。

但优化不能破坏可读性。远处敌人低频更新可以接受,玩家附近敌人的反应要稳定。性能策略也要写进测试场景。

AI 和任务系统

AI 经常和任务连接:某个敌人死亡推进任务,NPC 进入区域触发对话,Boss 进入二阶段改变音乐。任务系统应该监听明确事件,而不是直接读取 AI 内部临时状态。

例如敌人死亡时发送 enemy_defeated(id),任务系统根据 ID 和当前阶段推进。不要让任务脚本去检查敌人血量是否小于零。事件清楚,后期替换 AI 实现也不会破坏任务。

Demo 前测试

AI 测试要覆盖新玩家和边缘玩家。新玩家会暴露可读性问题,边缘玩家会故意绕路、卡墙、拉怪、反复读档。两者都重要。

测试问题:

  • 玩家是否理解被发现原因。
  • 玩家是否知道如何摆脱敌人。
  • 敌人是否有明显卡住。
  • 敌人是否能被无脑利用。
  • 读档后敌人状态是否正确。
  • 低帧率下攻击判定是否稳定。

最终检查清单

  • 敌人行为使用清楚状态机。
  • 感知规则可解释,并和玩家反馈一致。
  • 内部构建有状态、视野、路径调试绘制。
  • 巡逻和导航按关卡测试。
  • 攻击有前摇、有效帧、后摇和冷却。
  • 脱战和搜索规则不过度极端。
  • AI 性能按距离和区域控制。
  • 任务系统通过事件监听 AI 结果。

AI 不需要显得聪明到不可预测。对个人 Steam 游戏来说,能让玩家理解、能稳定复现、能被调试的 AI,才是更可靠的选择。

AI 参数也要数据化

敌人的视野角度、听觉半径、巡逻速度、攻击距离、警觉时间,都建议放在配置里。这样测试反馈回来后,可以快速调整而不改代码。参数表要写单位和范围,避免后期误填。

参数单位备注
vision_angle视野扇形角度
vision_distance米或格发现距离
alert_seconds警觉持续时间
search_seconds搜索最后位置
attack_cooldown两次攻击间隔

参数化不代表随便调。每次改动都要记录原因,比如“玩家无法理解隔墙发现,缩短听觉半径”。

AI 事件和音画反馈

AI 状态变化应该有音画反馈。敌人警觉时发出疑问声,发现玩家时有明确提示,丢失目标时行为变慢或播放搜索动作。反馈让玩家理解状态,也能让开发者观察调试。

如果 AI 内部进入 Alert,但画面没有任何变化,玩家会觉得敌人突然追来。状态机和反馈要一起设计,不能只在代码里切状态。

群体 AI 的简化策略

多个敌人同时追击时,不一定每个敌人都全速计算。可以让近处敌人完整 AI,远处敌人低频更新;让小怪有简单队列,避免全部挤在玩家身上;让远程敌人和近战敌人有不同站位。群体行为越多,越需要限制。

个人项目不要为了“聪明”让每个敌人都做复杂判断。玩家通常感受到的是场面是否公平、可读、不卡顿。

复盘玩家利用行为

测试者会找到 AI 漏洞:卡门、绕柱、拉怪脱战、站在高低差边缘无伤输出。不要把所有利用都视为坏事,有些可以成为策略;但如果它让核心挑战失效,就要处理。复盘时记录利用方式、发生位置、是否破坏进度,再决定改 AI、改关卡还是接受。

行为优先级要写清楚

AI 经常同时满足多个条件:看到玩家、听到声音、受到攻击、任务要求撤退。如果优先级不清楚,敌人会在状态之间抖动。建议明确优先级,例如死亡最高,硬直次之,剧情锁定再之后,战斗行为最后。

优先级行为
1死亡、销毁、禁用
2受击硬直、击倒
3剧情或任务控制
4攻击、追击、搜索
5巡逻、待机

优先级写清楚后,很多“敌人一边死亡一边攻击”“剧情中仍追玩家”的 bug 会减少。

AI 与动画同步

AI 状态切换要和动画状态同步。进入攻击状态后,如果动画还没到有效帧,就不能立刻造成伤害;受击动画未结束前,也不能直接恢复巡逻。动画事件可以驱动有效帧、脚步声和攻击结束,但要避免动画丢事件导致 AI 卡死。

比较稳妥的方式是:AI 有自己的超时保护。攻击动画理论上 1.2 秒结束,如果 2 秒仍未收到结束事件,就记录错误并恢复状态。这样发行版不会因为一次动画事件丢失让敌人长期卡住。

不同难度的 AI 差异

难度可以改变 AI 参数,但不要让规则完全变成另一套。简单难度可以降低发现距离、延长前摇、增加攻击冷却;困难难度可以缩短反应时间、增加组合概率。核心视觉语言应保持一致,玩家才能从低难度学习到高难度。

如果困难难度新增不同的行为,也要在测试表中单独覆盖。普通难度稳定,不代表困难难度稳定。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页