7.3 AI 框架与行为树


文档摘要

7.3 AI 框架与行为树 本节摘要:引擎把"看起来会思考"拆成三件朴素的事:感知组件回答"我注意到了什么",黑板加行为树回答"我接下来做什么",导航网格回答"怎么走过去"。本节沿这条链搭出一个会巡逻、会追击、会丢失目标后搜索的哨兵,并盘点 AI 的每帧查询账单。 AI 不是智能,是预算内的一套反应 玩家说"这游戏 AI 聪明",拆开看通常是三件事做对了:注意到玩家的时机合理(感知)、反应符合身份设定(决策)、移动路径可信(寻路)。反过来,AI 显得蠢也几乎总是这三件事之一出错:隔着墙突然锁定(感知无遮挡判断)、追追停停抽搐(决策抖动)、原地撞墙(寻路数据缺失)。

7.3 AI 框架与行为树

本节摘要:引擎把"看起来会思考"拆成三件朴素的事:感知组件回答"我注意到了什么",黑板加行为树回答"我接下来做什么",导航网格回答"怎么走过去"。本节沿这条链搭出一个会巡逻、会追击、会丢失目标后搜索的哨兵,并盘点 AI 的每帧查询账单。

AI 不是智能,是预算内的一套反应

玩家说"这游戏 AI 聪明",拆开看通常是三件事做对了:注意到玩家的时机合理(感知)、反应符合身份设定(决策)、移动路径可信(寻路)。反过来,AI 显得蠢也几乎总是这三件事之一出错:隔着墙突然锁定(感知无遮挡判断)、追追停停抽搐(决策抖动)、原地撞墙(寻路数据缺失)。引擎的 AI 框架按这三件事划界,每件事都有清晰的接口与开销——理解边界比调参数重要:感知的错误用感知层修,决策的抖动用决策层修,跨层打补丁是 AI 越修越乱的原因。

本节在知识体系中的位置:它是"意图应答"的主角,与 6.1 构成群体成本的上下游(本章的单体 AI 乘以 NPC 数量就是群体账单),寻路部分直接依赖 2.3 的查询思想——AI 的每帧本质是"一组有节流的物理与逻辑查询"。

三件事的接口与开销

感知组件(AIPerception)管理"注意到了什么":为 NPC 配置视觉(视野角、距离、丢失记忆时间)与听觉等感官,引擎按配置频率扫描候选目标,事件式通知"目标出现、丢失、遗忘"。它的账单在扫描频率与候选数量——几十个 NPC 全开高频视觉扫描,感知就成为 CPU 常驻支出;按重要度分级配频率是标准做法。

决策由黑板加行为树承担。黑板是一个键值小黑板,存 AI 当前的关键事实(目标是谁、家在哪、上个弹孔在哪);行为树是一棵带执行语义的树:选择节点按顺序尝试分支、序列节点依次执行子节点、装饰器改分支的执行条件、服务在分支活动期间周期性检查、任务是最小行动单元(走过去、等待、攻击)。行为树的执行从根每帧走一遍活跃路径,开销与树的活跃宽度相关——把"每帧都要的判断"放服务里降频执行,是行为树的节流要领。

寻路由导航网格支撑:在可行走表面烘焙出的多边形网络,移动组件接"走向某点"的请求后自动算路径并避让。账单在烘焙质量与重烘焙时机——导航数据缺一块,AI 就撞墙;动态门开关后没更新,AI 就卡门。场景变动频繁的区域用动态导航区域而非重烘焙整图。

哨兵决策树的结构

三态切换的精髓在分支优先级与黑板写入:感知事件只负责写黑板(目标出现写入、目标丢失写入最后已知位置),行为树只读黑板选分支——感知与决策解耦,谁也不直接命令谁,这是行为树架构最重要的一条纪律。

案例:一个会巡逻与追击的哨兵

背景:关卡需要哨兵 NPC:沿路线巡逻,视野内发现玩家后追击并攻击,玩家脱离视野后先到最后目击点搜索,找不到回巡逻。这是行为树架构的最小完整形态。

操作:第一步,NPC 蓝图继承 AI 控制器规范,挂感知组件,配置视觉感官:半场视角一百二十度、感知半径两千、丢失记忆五秒。第二步,黑板定义三个键:目标Actor、最后已知位置、巡逻点列表。第三步,按上面的树搭行为树:追击、搜索、巡逻三个分支按优先级排列,追击分支内的攻击转换用"距离进入攻击范围"装饰器,搜索分支结束时清最后已知位置。第四步,感知事件写黑板:目标更新事件里同时更新目标键与最后已知位置;感知丢失事件(带记忆期)触发后只更新最后已知位置。第五步,关卡铺导航网格边界体积,烘焙后用导航调试视图确认可行走区域覆盖巡逻与追击范围。第六步,把感知扫描间隔从默认调到零点五秒,验证反应延迟是否可接受。

结果:哨兵巡逻流畅,玩家进入视野约半秒内转头追击;躲进掩体五秒后哨兵走向最后目击点环顾,无果后回巡逻。全程无撞墙、无抽搐。

解读:两个可感知的"聪明"细节其实都是参数与结构问题:半秒的反应延迟来自感知扫描间隔——把间隔调低到零点一秒反应更快,但十个哨兵的感知开销就上十倍,反应速度与群体预算的换算关系要心里有数;搜索行为之所以"像在想",是因为黑板里保留了失败的位置信息并驱动了行动,AI 的可信度来自"状态被持续记录",不是来自更复杂的树。变式一:听觉感知——开枪事件广播噪声源,哨兵的听觉感官接到后写入最后已知位置,与视觉共用搜索分支。变式二:群体协作——黑板加"支援标记"键,哨兵发现玩家时写共享黑板通知附近同伴,注意共享写入要限频防抖。变式三:关卡机关交互——行为树任务里调用 4.2 的数据表查询哨兵性格参数(胆小的见玩家直接逃向警卫点),AI 的"性格"就是不同参数的同一棵树。

常见坑:在行为树任务里每帧做射线检测或全场景查询。树的活跃路径每帧走,任务里的重查询等于每帧重查询——重活放服务节点降频,或感知层的事件驱动替代轮询。

本节要点回顾

  • AI 三件事:感知(注意到什么)、决策(接下来做什么)、寻路(怎么走过去),边界清晰才好修。
  • 黑板是唯一事实源:感知只写、行为树只读,解耦是行为树架构的第一纪律。
  • 树的节流靠服务降频,活跃路径每帧走,重查询必须挪出任务体。
  • 反应速度与群体预算成反比:感知扫描间隔按 NPC 重要度分级配置。
  • 可信感来自状态记录:失败位置、记忆时长、性格参数,"聪明"是数据驱动的表象。

高频问答

问:行为树和状态机做 AI 决策怎么选?
树长在"行为的组合与优先级",状态机长在"状态的互斥与转移"。哨兵这类多行为竞争(巡逻、搜索、追击随时按情报切换)用树;典型动作类敌人的招式阶段(起手、攻击、硬直)用状态机。两者还能嵌套:行为树的任务里驱动状态机,各管一层。

问:NPC 会在导航网格外活动吗(比如跳跃、攀爬)?
导航网格只管可行走面。网格外的位移用专门的标记点加动作序列做(跳窗、翻墙),标记点附近把网格补上缺口——AI 主干靠寻路,特殊位移靠导演好的片段,这也是商业项目的常规做法。

问:怎么做难度分级而不重写行为树?
三个参数层:感知参数(视野距离与反应延迟)、行为树里的装饰器条件(敢不敢孤身追击)、技能参数(命中与伤害)。同一棵树配三组数值就是三档难度——难度是数据问题,不是结构问题,这与 4.2 的数据驱动一脉相承。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U