让我先带你走进一家川菜馆的后厨。老板不亲自炒菜,而是任命了一位经理老周(AIController)。老周手里有一本工作手册(行为树),上面画满了“如果……就……”的流程图;厨房地板上画着清晰的送菜动线(NavMesh),传菜员可以沿着动线快速送菜;要临时加一道水煮鱼时,老周会派人去食材间挑最新鲜的鱼(EQS);服务员(感知系统)看到客人举手,会第一时间通知老周。老周还把“5号桌不要香菜”写在小白板(黑板)上,全后厨都能看见。每天从备货到打烊,就是 AI 的完整生命周期。 这堂课我们不聊抽象论文,就走进这家“AI 餐厅”,把 Unreal Engine 的 AI 插件系统拆开看:行为树怎么指导决策、NavMesh 怎么规划路径、EQS 怎么挑选最佳点位、感知系统怎么发现玩家,以及它们在 FPS 和 RTS 游戏里如何组合成“会玩”的 NPC。读完你会明白,游戏 AI 并不是玄学,而是一套组织严密的“后厨管理学”。
掌握 UE AI 插件,等于拿到游戏 AI 工程化的入场券:无论是 FPS 里的精兵敌人还是 RTS 里的千军万马,你都能用同一套组件搭出专业级 NPC 行为。
目录
可视化演示
展示Unreal Engine AI系统AIController驱动行为树EQS与NavMesh协作架构、行为树选择器顺序执行流程、EQS候选点评分选优及NavMesh多边形A*寻路,含六边网格背景动画。
本节配有交互动效(进入视口后自动加载,约 3KB)。
1. AI框架总览:经理、手册与后厨动线
傍晚五点半,川菜馆的后厨开始热闹起来。经理老周不颠勺、不传菜,但他知道每一道菜该催谁、每一桌客人该安抚谁。他不是老板,却是后厨真正的“大脑”——在 Unreal Engine 里,这个角色叫 AIController(AI 控制器)。Pawn 则是经理可以支配的“身体”:传菜员、厨师,谁被经理“接管”(Possess),谁就听经理指挥。
AI 并不是一堆散装的 if-else,而是一个组织严密的闭环:感知(服务员的眼睛耳朵)→ 决策(经理的大脑)→ 行动(传菜员的腿脚)。在 UE 工程里,AIController 负责持有行为树组件、感知组件和导航引用;Pawn 负责表现层;两者通过 Possess 建立绑定。引擎每帧依次驱动它们,就像后厨按“看单—配菜—出锅”的节奏运转。
这个循环里有一个贯穿全篇的节奏器——帧间隔 Δt。AI 的移动、决策、甚至动画都要换算成“每秒”的量级,靠 Δt 保持一致:帧率再波动,角色移动速度也不会忽快忽慢。
经理老周的心跳就是帧循环:心跳越稳,出菜越有节奏。可一旦后厨同时涌入五十个外卖订单(AI 数量暴涨),心跳也会乱——这就是为什么性能优化永远是 AI 工程绕不开的话题,我们留到第八节细聊。
- 位移 ΔsAI 角色在一帧内实际移动的距离,单位通常是“虚幻单位”(约等于厘米)。
- 帧间隔 Δt第 n+1 帧与第 n 帧的时间差,引擎用它统一不同帧率下的运动节奏。
- 移动速度 v单位时间内的位移。AIController 把 v 交给移动组件,驱动 Pawn 沿导航路径前进。
2. 行为树机制:那本皱巴巴的工作手册
老周手里那本皱巴巴的工作手册,其实就是一棵树。第一页写着“客人催菜怎么办”:先看单子是否漏做(条件判断),漏了就赶紧补做(行动),没漏就去安抚客人(另一个行动)。UE 的行为树(Behavior Tree)就把这棵“决策树”用节点拼出来,挂在 AIController 上,按帧执行。
树上有两种“组合节点”。Selector(选择器)像择优录取的面试官:从左到右依次尝试子节点,任何一个成功就立刻返回成功;Sequence(顺序器)像流水线的质检员:必须每道工序都通过才算整体成功,中途任何一步失败就整体失败。此外还有 Decorator(装饰器)这个“门卫”,在节点门口检查血量、距离、冷却等条件再决定放不放行;Service(服务节点)这个“巡逻员”,每隔一段时间自动刷新黑板上的数据。
行为树节点本身不写复杂逻辑,节点名字就是“干什么”。引擎从根节点开始,按帧往下 Tick。比如一个敌人 AI:根节点是 Selector,下面挂“发现敌人→攻击”和“没发现→巡逻”两个分支;Decorator 检查“玩家是否在 500 码内”,Service 每 2 秒把玩家最新位置写到黑板。整个决策过程像翻手册一样,有据可查。
手册不保证每道菜都成功,但它保证决策有章法。把“找掩体”“换弹夹”做成子树,FPS 和开放世界都能复用——就像宫保鸡丁的菜谱,换家店照样能炒。这就是行为树最迷人的地方:可复用、可调试、可热更新。
- 子节点成功率 pᵢ行为树里每个子节点独立判断自己能否成功,取值在 0 到 1 之间。
- Sequence 总成功率所有工序都成功才算成功,概率是各节点成功率的连乘。
- Selector 总成功率至少一个分支成功即可,等价于 1 减去“所有分支都失败”的概率。
3. 黑板数据:小白板上的便签
后厨墙上挂着一块小白板:“5 号桌不要香菜”“水煮鱼加辣”“冰箱还剩两斤里脊”。传菜员、厨师、经理都能看、都能写。UE 的 Blackboard(黑板)就是这块小白板:一个挂在 AIController 上的键值存储,供所有行为树节点共享读写。
行为树节点不直接去“问”游戏世界,而是从黑板读数据。比如“目标位置”这个键,感知系统负责写,移动节点负责读。这样一来,“谁收集信息”和“谁使用信息”就彻底解耦——哪怕把感知逻辑整个换掉,行为树代码一行都不用改。这就像后厨换了新的进货渠道,菜单和出菜流程照旧。
黑板还带监听通知:某个键的值一变,所有关心它的节点立刻收到回调。比如一个 AI 发现玩家,在黑板写下“敌人=玩家”,全队行为树瞬间切到战斗分支。一个情报员改变整支队伍的决策,这就是黑板协作的威力。不过,黑板上的信息也有“保质期”:太旧的敌人位置不该被当成实时情报。
小白板上的便签贴久了会褪色,黑板上的敌人位置也一样。十分钟前的坐标早已不可信——于是 AI 会打一个“置信度折扣”,低到阈值就重新搜索。记忆与遗忘的平衡,让 AI 看起来既有记性又够理智。
- 观测时刻 t从信息写入黑板的时刻算起,经过的游戏时间。
- 遗忘速率 λ取值越大,“忘得越快”,位置信息越早失效,常用于切换 AI 的搜索行为。
- 可信度权重 ww 越接近 1 表示信息越新鲜;低于阈值时 AI 会重新发起 EQS 查询。
4. 导航寻路:厨房地砖上的送菜动线
老周不用记住每张桌子在哪,他只需要知道后厨通往前厅的哪条动线能走。餐厅地板上画好的“送菜动线”,就是 NavMesh(导航网格)——把可行走区域切成一堆凸多边形,AI 角色只能在这张“合法地图”上移动。地图之外的地方(墙、灶台、水池)再近也走不过去。
有了地图还不行,还得有“找路算法”。UE 底层使用 A*(A-Star)系列算法搜索路径:把网格当成一张图,从起点不断扩展候选点,用“已走代价 + 预估代价”指导搜索方向。临时挡路的餐车(动态障碍物)则由局部避障来绕开——老周不会因为一辆餐车就重画整条动线,传菜员侧个身就过去了。
完整链路是:NavMesh 提供可行走多边形 → A* 计算全局路径 → AI 发起 MoveTo 请求 → 移动组件沿路径行走并做局部避障。工程上还会限制单帧寻路数量、做路径平滑,防止几百个单位同时寻路把 CPU 打满。这也是 RTS 游戏里最常见的性能瓶颈之一。
动线画得越合理,传菜效率越高;NavMesh 烘焙得越精细,寻路越像真人。但网格太细会废内存,太粗会让角色卡门穿墙——就像后厨每块地砖都单独定制成本太高,“够用就好”才是工程智慧。
- 实际代价 G(n)从起点沿已知路径走到节点 n 的累计消耗,每走一格加 1。
- 启发函数 H(n)从 n 到终点的估算代价,常用曼哈顿距离(横向差 + 纵向差)。
- 总估价 F(n)已走代价与预估代价之和,A* 每轮都挑 F 最小的节点扩展。
5. EQS环境查询:挑最新鲜的那条鱼
客人临时加菜要“水煮鱼”,老周派传菜员去食材间挑最新鲜的鱼。食材间里有鱼有肉有菜,到底选哪个?EQS(Environment Query System,环境查询系统)就是帮 AI“挑菜”的系统:在环境里撒一批候选点,逐个打分,挑出最高分的那一个。
EQS 的流程是“生成—测试—排序”。先生成候选点位,比如以 AI 为圆心的环形点阵;再对每个点跑若干测试:能不能看到敌人、离敌人多远、是否在掩体后面;最后按权重汇总得分,返回最优位置。找掩体、找狙击点、找坐下聊天的空位,都是 EQS 的拿手好戏。它回答的是一个关键问题:“现在应该站到哪个位置最有利?”
测试项可以设硬性条件(比如“必须离敌人 300 码以上”),也可以输出 0 到 1 的软分数。硬条件像招聘的学历门槛,先筛掉不合格者;软分数像面试评分,按权重算总分。权重怎么配,直接决定了 NPC 的“性格”——同样的查询,激进权重打出冲锋点位,猥琐权重打出蹲守点位。
挑鱼的老手从来不看单一指标——新鲜度、价格、个头综合起来才出手。改 EQS 权重,就能把“猛冲猛打”的敌人变成“打一枪换一个地方”的老兵。一套查询系统,两种完全不同的战术风格,这就是权重配置的魔力。
- 候选点 p由生成器产出的一个潜在目标位置,例如掩体后方或环形点阵上的某一点。
- 测试项 Testᵢ(p)对 p 做单项评估,例如“到敌人的距离”“是否被看到”,输出越接近 1 表示越符合期望。
- 权重 wᵢ每个测试项的重要程度,权重越大,该项对最终选点的影响越强。
6. 感知系统:服务员的眼睛和耳朵
服务员小王不用满场跑着问客人“要点菜吗”。他站在出菜口,眼睛扫全场、耳朵听动静,谁举手、谁皱眉、谁喊买单,第一时间报给经理。UE 的 AIPerception(AI 感知)组件就是这样的眼睛和耳朵,挂在 AIController 上自动工作。
给 AI 挂上感知组件,配置好视觉(视野角度 + 最大视距)和听觉(听到枪声的半径),引擎就会自动把符合条件的目标作为“刺激”推送给 AI。玩家进入视野,AI 立刻收到“发现目标”的事件,行为树随之切换分支——不必每帧手写距离判断。刺激强度还会随距离衰减:5 米外的敌人轮廓清晰,50 米外就只是模糊影子。
感知系统还带“遗忘时间”:目标离开视野几秒后,AI 会重新回到搜索状态,而不是永远追着一团空气。真实感与性能,就在这一收一放之间达到平衡。感知到目标后,系统会把信息写入黑板(还记得小白板吗?),行为树再从黑板读取,完成“感知→决策”的接力。
好服务员懂得选择性注意,不会盯着每桌客人看十秒。AI 的感知组件也一样,不会对全场无限量计算。距离衰减、遗忘时间、每帧感知预算,都是为了让 AI“看起来敏锐”的同时不烧光 CPU——这背后全是工程上的精打细算。
- 原始强度 I₀目标在零距离时产生的刺激强度,例如枪声的基础响度或角色轮廓的清晰度。
- 距离 d感知者与刺激源之间的直线距离,单位与场景一致。
- 衰减系数 k控制衰减快慢。k 越大,刺激随距离衰减得越剧烈,感知半径越“紧凑”。
7. 生命周期:从备货到打烊
一家餐厅有完整的营业周期:备货、开门、高峰、打烊、锁门。AI 角色也有一套生命周期。理解它,你才知道在哪个环节挂监听、在哪个环节释放资源——否则就会出现“角色没了,逻辑还在跑”的幽灵 AI,就像打烊忘了关煤气。
在 UE 中,通常是 GameMode 负责“开业”:用 SpawnActor 生成 Pawn 和 AIController,然后调用 Possess 让控制器接管 Pawn——就像老板任命老周当经理,把一间后厨交给他。运行中,控制器每帧 Tick 驱动行为树;任务结束或玩家离开时,Unpossess 解除接管,最后 Destroy 销毁控制器和 Pawn。
生命周期还支持“换身”:同一个控制器可以先 Unpossess 再 Possess 另一个新 Pawn——老周从川菜馆调到隔壁粤菜馆,人还是那个人,后厨换了一间。多阶段 BOSS 战就爱用这招:二阶段脱掉盔甲换一套技能,但仇恨列表、血量状态全部保留。状态迁移可以由引擎事件(如 OnPossess、OnUnpossess、OnDestroyed)触发,开发者只需在各阶段挂好回调。
打烊清单漏了关煤气,第二天必出事故。AI 生命周期如果忘了注销委托、清理感知回调,同样会留下“幽灵任务”。进场有规矩,退场有闭环——这是所有 AI 系统的生命线。
- 当前状态 SₜAI 生命周期中的某个阶段,例如“未绑定”“运行中”“已解除绑定”。
- 触发事件 eₜ驱动状态变化的外部信号,比如 Possess 请求、玩家离开、关卡卸载。
- 转移函数 δ定义“在什么状态下遇到什么事件该去哪”,是生命周期管理的核心规则表。
8. 工程实战:火锅店与宴会厅的不同打法
火锅店高峰期的传菜员,和宴会厅里五六十个服务员,管理方式完全不同。FPS 里敌人少但个个是精兵,要会用掩体、会包抄;RTS 里单位动辄几百上千,每个都跑复杂决策,CPU 直接烧穿。把 UE AI 用在不同的游戏里,就要有不同的打法。
FPS 敌人 AI 的经典组合拳:感知组件发现玩家 → 黑板记录目标 → 行为树切到“交火”分支 → EQS 找最佳掩体 → NavMesh 寻路包抄。整套链路流畅得像真人队友:先缩回掩体回血,再探身射击,最后绕侧翼。RTS 则相反,大量单位共享同一份行为树模板,用路径共享、导航分流避免拥堵,再用“共享黑板”让相邻单位协调目标,避免五个农民一起去砍同一棵树。
性能优化是落地核心,常用三板斧:AI LOD(离玩家远的 AI 降低更新频率甚至暂停决策)、感知预算(限制每帧处理的刺激数量)、休眠唤醒(没事做的 AI 直接睡大觉)。配合行为树可视化调试器,可以像看老周翻手册一样,实时观察每个节点在返回成功还是失败。距离越远的 AI,更新频率越低——反正玩家也看不清远处的小兵在干嘛。
火锅店靠“就近接单”的简单规则跑出效率,宴会厅靠“整体预案”的周密调度做出气势——工程上没有银弹,只有场景匹配。学会为不同游戏挑选不同的 AI 架构,才是把 UE AI 插件用活的核心心法。
- 距离 dAI 与当前观察者(通常是玩家)之间的直线距离。
- 裁剪半径 D超过这个距离,AI 的更新频率不再继续下降,避免远处 AI“完全不动”造成穿帮。
- 更新频率 fAI 每秒执行感知和决策的次数。近处给满 f_max,远处降到 f_min。
AI 应用场景
FPS 智能敌人:掩体攻防与侧翼包抄
阶段:感知 → 决策(行为树)→ 行动(NavMesh + EQS)
解决的问题:传统 FPS 敌人只会“看见玩家就站着射击”,玩家蹲在掩体后就能无伤通关。AI 需要像真人一样利用地形、主动包抄,而不是站在原地当靶子。
具体案例:在一款巷战 FPS 中,AI 敌人使用 AIPerception 感知玩家枪声和视野;行为树根据黑板上的玩家位置切换“压制射击 / 转移掩体 / 呼叫队友”三个分支;EQS 实时查询“离玩家 20 米、有掩体遮挡、能看到玩家”的高分点位,再通过 NavMesh 寻路绕后。玩家直观感受是“敌人会绕我”,实际上只是一套标准组件链路在高效运转。
RTS 大规模单位:避免千军万马“堵厨房门口”
阶段:调度决策 → 共享黑板 → 导航分流
解决的问题:RTS 中几百个单位同时下达移动指令,若各算各的路径,会出现大规模拥堵和 CPU 峰值。就像后厨高峰期所有传菜员挤在同一个门口。
具体案例:在一款 RTS 游戏中,玩家框选 200 个步兵点击目标点,引擎将单位编组后共享一条主路径,再按偏移量生成各自的导航流线;行为树统一处理“到达-散开-攻击”的状态切换,黑板记录敌方基地坐标供全队共享。配合 AI LOD,远处单位每秒只决策两次,近战单位每秒更新十次,整体 CPU 开销被压到 2ms 以内。
开放世界 NPC:像真人一样“找事做”
阶段:行为树日常循环 + EQS 挑选交互点位
解决的问题:开放世界里的 NPC 如果只会走固定路线,世界会显得死气沉沉。AI 需要根据环境实时选择“去哪、做什么、和谁互动”。
具体案例:在城市开放世界中,NPC 的行为树根节点是一个 Selector:“有玩家搭话 → 转身对话;肚子饿 → 用 EQS 找最近的餐馆并前往;累了 → 用 EQS 找长椅坐下”。黑板记录 NPC 的“饥饿值”和“体力值”,服务节点每 5 秒刷新一次。玩家看到的是一座有生活气息的城市,背后其实是行为树、黑板和 EQS 三件套在持续运转。
Python 演示
import heapq class BTNode: def __init__(self, name, children=None): self.name = name self.children = children or [] def tick(self, blackboard): raise NotImplementedError class Selector(BTNode): def tick(self, blackboard): for child in self.children: if child.tick(blackboard) == "success": return "success" return "failure" class Sequence(BTNode): def tick(self, blackboard): for child in self.children: if child.tick(blackboard) == "failure": return "failure" return "success" class CheckHealth(BTNode): def tick(self, blackboard): return "success" if blackboard["health"] > 30 else "failure" class MoveTo(BTNode): def tick(self, blackboard): path = a_star(blackboard["map"], blackboard["pos"], blackboard["target"]) if not path: return "failure" blackboard["pos"] = path[-1] blackboard["path"] = path return "success" class AttackEnemy(BTNode): def tick(self, blackboard): blackboard["enemy_hp"] -= 10 return "success" def a_star(grid, start, goal): rows, cols = len(grid), len(grid[0]) def heuristic(p): return abs(p[0] - goal[0]) + abs(p[1] - goal[1]) heap = [(0, start)] came_from = {start: None} cost = {start: 0} dirs = ((1, 0), (-1, 0), (0, 1), (0, -1)) while heap: _, current = heapq.heappop(heap) if current == goal: break for dx, dy in dirs: nxt = (current[0] + dx, current[1] + dy) if not (0 <= nxt[0] < rows and 0 <= nxt[1] < cols): continue if grid[nxt[0]][nxt[1]] == 1: continue new_cost = cost[current] + 1 if nxt not in cost or new_cost < cost[nxt]: cost[nxt] = new_cost came_from[nxt] = current heapq.heappush(heap, (new_cost + heuristic(nxt), nxt)) if goal not in came_from: return [] path = [] node = goal while node is not None: path.append(node) node = came_from[node] return list(reversed(path)) def build_map(): grid = [[0] * 15 for _ in range(10)] for r in range(10): grid[r][7] = 1 for r in range(10): if r < 3 or r > 6: grid[r][4] = 1 return grid def main(): blackboard = { "map": build_map(), "pos": (1, 1), "target": (8, 13), "health": 80, "enemy_hp": 100, } root = Selector("战斗或撤退", [ Sequence("战斗分支", [ CheckHealth("血量是否充足"), AttackEnemy("攻击敌人"), ]), Sequence("撤退分支", [ MoveTo("撤到目标点"), ]), ]) for i in range(5): result = root.tick(blackboard) print("tick", i, result, "pos", blackboard["pos"], "enemy_hp", blackboard["enemy_hp"]) if __name__ == "__main__": main()
class Selector(BTNode):选择器节点:从左到右尝试子节点,任一成功立即返回成功。class Sequence(BTNode):顺序器节点:全部子节点成功才算成功,对应“进攻”这样的多步骤动作。if child.tick(blackboard) == "success"每个节点从黑板读取数据并返回状态,这就是行为树与数据解耦的关键。blackboard["health"]黑板键值共享:血量由外部写入,行为树只负责读取,互不干扰。heapq.heappush(heap, (new_cost + heuristic(nxt), nxt))A* 核心:按“已走代价 + 启发代价”排序候选点,保证优先搜索最有希望的方向。def heuristic(p):曼哈顿距离启发函数,只计算横向差加纵向差,简单且永远不高估。root = Selector("战斗或撤退", [...])用组合节点拼出完整决策树:先试战斗,失败(血量低)就撤退。result = root.tick(blackboard)引擎每帧驱动的就是这一步:从根节点开始,让整棵树做一次评估。
常见误区
误区状态机也是“一个状态一个行为”,行为树也是“一个节点一个行为”,两者差不多,直接把状态机的 if-else 搬到树上就行。
正解两者结构完全不同。状态机靠“迁移条件”在状态之间跳转,改一个条件可能要连带改很多条迁移;行为树靠树形优先级天然地“尝试—回退”,Selector 和 Sequence 的组合自带容错。把状态机硬塞进行为树,就像把中餐菜谱硬套进西餐后厨——锅碗瓢盆都认识,但是出不了那个味。
为何常见:刚接触行为树时,很容易拿熟悉的“状态”去套“节点”,忽略了组合节点带来的结构优势。
误区EQS 能返回“最佳位置”,那 AI 找路应该也用它,寻路和选点不是一回事吗?
正解寻路回答“怎么走”——从 A 到 B 的路径,靠 NavMesh 配合 A* 算法;EQS 回答“去哪”——在候选点里挑一个最优落点,靠生成器、测试和加权评分。让 EQS 找路,等于让挑鱼的师傅去画餐厅动线图——他确实懂食材,但画地图不是他的活。
为何常见:EQS 和寻路都涉及“位置”和“搜索”这两个词,概念边界容易混在一起。
误区关卡建好,NavMesh 烘焙一次,后面 AI 就永远能找到路了。
正解场景是动态的——门被炸开、桥被炸断、新掩体生成,都会让旧导航网格失效。工程上要配合动态 NavMesh 更新或局部修改,否则 AI 会对着断墙反复“原地跑步”,看起来像卡了 bug 的传菜员。静态烘焙只是起点,运行时维护才是常态。
为何常见:单机 demo 里场景静止不动,很容易让人忽略动态世界对导航的破坏。
误区感知系统不就是每帧遍历所有玩家,算一下距离和角度吗?自己写几行代码就搞定了。
正解UE 的 AIPerception 是事件驱动 + 多感官 + 遗忘机制的完整框架,还带刺激强度衰减和感知预算控制。手写距离判断看似简单,但缺乏事件通知、遗忘机制、多 AI 共享,后期性能和可维护性都会崩。自己写感知就像自己用纸笔记客人的喜好——记一桌还行,记一百桌就乱了。
为何常见:眼睛看到的东西确实可以用“距离 + 角度”描述,但“持续自动感知、低开销、可扩展”这套工程框架,是手写循环很难复制的。
面试题
Q1. 在 UE AI 系统中,扮演“决策大脑”角色、驱动整个 AI 流程的组件是?
- A.AIController 控制器← 正确答案
- B.NavMesh 导航网格
- C.BehaviorTree 行为树
- D.EQS 环境查询系统
答案:A。AIController 像餐厅经理,负责持有行为树、感知组件并驱动 AI 决策;行为树只是经理手里的手册,NavMesh 是地砖动线,EQS 是挑菜系统,它们都是被调度的工具。
Q2. 行为树中,必须等全部子节点都成功才返回成功的组合节点是?
- A.Sequence 顺序器节点← 正确答案
- B.Selector 选择器节点
- C.Decorator 装饰器节点
- D.Service 服务型节点
答案:A。Sequence 像流水线质检员,所有工序都通过才算成功;Selector 像面试官,遇到第一个合格的就收手;Decorator 是门卫,Service 是巡逻员。
Q3. 关于 Selector 选择器的执行逻辑,下列描述正确的是?
- A.只执行第一个子节点就返回
- B.全部子节点成功才算成功
- C.依次尝试子节点,遇成功立即返回← 正确答案
- D.失败后反复重试当前子节点
答案:C。Selector 从左到右依次尝试子节点,任一成功就立即返回成功;选项 B 是 Sequence 的特征,A 和 D 都不符合行为树的常规执行语义。
Q4. AI 黑板(Blackboard)在系统中的核心作用是?
- A.保存玩家存档和关卡数据
- B.提供 AI 间共享的键值数据← 正确答案
- C.渲染调试用的屏幕信息
- D.管理动画蒙太奇资源
答案:B。黑板就像后厨的小白板,以键值对形式存放“敌人位置、血量、目标”等数据,供行为树节点和感知系统共享读写,并支持变更通知。
Q5. A* 寻路公式 F(n)=G(n)+H(n) 中,H(n) 表示的是?
- A.起点到当前点实际代价
- B.整条路径的总代价
- C.已消耗的 CPU 时间
- D.当前点到目标估算代价← 正确答案
答案:D。H(n) 是启发函数,估算从当前节点到终点还要花多少代价,常用曼哈顿距离;G(n) 才是起点到当前点的实际已走代价,F(n) 是两者之和。
Q6. EQS 环境查询系统返回给 AI 的最终结果是?
- A.一条完整的最短路径
- B.敌人的精确血量数值
- C.一组带评分的候选位置← 正确答案
- D.当前帧的渲染耗时
答案:C。EQS 回答“去哪”——生成候选点、逐项测试、加权评分后返回最优位置;找最短路径是 NavMesh 配合 A* 的工作,血量是黑板数据,渲染耗时是性能指标。
Q7. 关于 AIController 生命周期,下列哪项说法是正确的?
- A.生成后必须手动调用 Possess
- B.生命周期只有生成与销毁
- C.控制器销毁后 Pawn 自动销毁
- D.控制器可切换 Possess 新 Pawn← 正确答案
答案:D。控制器可以 Unpossess 当前 Pawn 再 Possess 新 Pawn,就像经理从川菜馆调到粤菜馆,人不变但后厨换了;GameMode 通常会自动完成首次 Possess,控制器的销毁与 Pawn 销毁相互独立。
Q8. 下列哪些模块属于 UE AI 系统的核心组成部分?
- A.行为树 BehaviorTree← 正确答案
- B.导航网格 NavMesh← 正确答案
- C.环境查询 EQS← 正确答案
- D.音效引擎 AudioMixer
答案:ABC。行为树管决策、NavMesh 管寻路、EQS 管选点,三者是 UE AI 的“三件套”;AudioMixer 属于音频模块,与 AI 决策无关。
Q9. 行为树中常见的节点类型包括哪些?
- A.Selector 选择器节点← 正确答案
- B.Sequence 顺序器节点← 正确答案
- C.Decorator 装饰器节点← 正确答案
- D.Material 材质节点
答案:ABC。Selector、Sequence、Decorator、Service 是行为树的四类经典节点;Material 是渲染用的材质节点,不参与 AI 决策。
Q10. 关于 UE 感知系统 AIPerception,下列说法正确的有哪些?
- A.支持视觉听觉等刺激感知← 正确答案
- B.刺激强度随距离远近变化← 正确答案
- C.感知结果可写入黑板数据← 正确答案
- D.感知结果会自动执行攻击
答案:ABC。AIPerception 支持视觉、听觉等刺激,强度会随距离衰减(类似 I₀/(1+kd²)),感知结果会写入黑板供行为树读取;但感知只负责“发现”,“执行攻击”是行为树的决策,感知不会自动出手。