中EN
精修课概念页

黑板:感知、决策、执行共用的一块记忆

Blackboard Architecture

更新于 2026-10-19 约 10 分钟游戏AI黑板Blackboard工作记忆知识表示

站起来,推开椅子,再倒下

一个 NPC 正坐在桌边,被你一枪打中。它应该就地瘫倒——可在《No One Lives Forever 2》那一代的做法里,它可能先站起来、推开椅子,然后才倒下。

问题出在哪?那时每个目标 (Goal) 都是一个黑盒,各自把状态藏在自己身上,互相不共享姿势这类信息。比如「坐着」只记在负责坐下的那个目标里,接手的「死亡」目标并不知道角色现在是坐着的。Jeff Orkin 在讲 F.E.A.R. 时总结说:目标和行动解耦以后,必须有一块外部的共享工作区,用来表达「是否坐着」「是否在和桌子交互」这些事实,死亡的姿态才能正确。

这块共享工作区,就是黑板 (Blackboard)。

各藏各的坐下工作(我坐着)死亡(?)巡逻(?)共用一块黑板坐着 = 是当前敌人 = 玩家坐下工作死亡巡逻
左:每个目标把状态藏在自己身上,别的目标看不到。右:所有模块读写同一块黑板,「坐着」这个事实谁都能看见。

黑板上写些什么

黑板是多个模块共享的「工作记忆」:感知写入,决策读取,任务执行时回头更新。各个子系统不用私有状态互相耦合,只通过这块表交换事实。《游戏引擎架构》(GEA) 把「某种记忆或知识」和寻路、感知并列,算作 AI 最底层的三件套之一。

类别例子
感知结果当前敌人、上次看见的位置、噪声位置
决策的中间量选定的掩体、环境查询找到的最佳点、当前目标的优先级
执行的反馈路径是否失败、是否正在装弹、命令是谁下的

一次典型的读写往来是这样的:

sequenceDiagram
  participant S as 感知
  participant B as 黑板
  participant D as 行为树
  participant T as 移动任务
  S->>B: 写入 当前敌人、上次看见的位置
  D->>B: 读取 当前敌人
  D->>T: 启动:移动到上次看见的位置
  T->>B: 写入 路径失败
  D->>B: 读取 路径失败
  D->>T: 改为:原地搜索

感知和任务都不知道行为树的存在,行为树也不直接去问感知系统——大家只认黑板上的键。

行为树里的黑板:数据上下文

Chris Simpson 讲行为树时,给每个树实例配了一块数据上下文 (Data Context):一张「字符串键 → 任意值」的表。前面的节点把目标点写进 destination,后面的 Walk 叶子读出来去走;调用子树的叶子把同一块上下文传下去,子树就能像模块一样复用。这就是树内的黑板。

虚幻引擎把黑板做成了独立的资产,每个键的类型是固定的。行为树的装饰器、服务和任务都通过黑板的键来通信,感知组件的回调也常常直接去写这些键。

Halo 2 的 Props:按对象存的信念

Damian Isla 给 Halo 2 的 AI 记忆分了几类:

  • 行为的短时状态;
  • 行为的持久状态,比如冷却时间;
  • 按对象存的感知信念:对每个目标,「我以为它在哪」;
  • 按对象、按行为存的记录,比如「这个目标我已经搜过了」。

后两类就是 Props。它存的是 AI 以为的世界,可以和真实世界不一致——目标已经走开了,AI 还记得旧位置,于是它可以被骗、会惊讶、会去搜一个已经没人的地方。

此外,Halo 2 的行为树本身是静态的、所有角色共用;每个角色只为当前激活的那条路径分配短时状态。这比一张扁平的全局字典多了一层「按对象索引」的知识模型,但核心思想仍然是共享记忆。

拉与推:黑板和事件

黑板是拉模型:谁需要,谁就去读最新的值。事件是推模型:发生了什么,主动通知订阅的人。

在游戏里怎么用

取舍与常见的坑

小结与练习

  • 黑板是 AI 各模块共享的工作记忆:感知写、决策读、任务回头更新;
  • 它解决的是「目标各藏各的状态」带来的问题,比如站起来推开椅子再倒下;
  • 行为树的数据上下文、虚幻引擎的黑板资产、Halo 2 的 Props,都是同一思想的变体;
  • 黑板是拉模型,事件是推模型,常见做法是事件写黑板、决策读黑板。

练习:为一个会「听到声音就去查看」的守卫设计黑板:需要哪些键?哪些是感知写的,哪些是任务写的?「听到的噪声位置」过多久应该失效,由谁来清掉它?

  1. GEA4 Vol II §18.2.3 Artificial Intelligence(摘录笔记) GEA4 §18.2.3(记忆/知识层)
  2. Handling Complexity in the Halo 2 AI(笔记) Isla Halo 2 Props / 记忆分类
  3. Three States and a Plan: The A.I. of F.E.A.R.(笔记) Orkin Working Memory / 解耦目标与行动
  4. Behavior trees for AI: How they work(笔记) Simpson Data Context
  5. Behavior Tree Overview UE 5.8 Behavior Tree / Blackboard

相关页面

游戏开发游戏 AI 决策管线Game AI Sense-Decide-Act Pipeline游戏 AI(与生成式 DNN 不同)通常按 感知 → 决策 → 执行 分层:底层是寻路、感知与记忆;中层是角色控制(对接动画/物理);上层是目标与决策(行为树、效用、规划等)。GEA 强调「perception is reality」——玩家看不见的内部聪明不算数。游戏开发行为树原理Behavior Tree Fundamentals行为树 (Behavior Tree, BT) 用层级节点控制决策流:叶子做动作或条件,Sequence / Selector 等组合节点决定子节点如何推进;节点返回 Success / Failure / Running,从而自然跨多帧。相对 FSM,BT 更易用优先级回退表达「失败了还有 Plan B」。游戏开发 · UE5行为树与 StateTreeBehavior Tree & StateTreeUE 的 AI 决策有两套工具:行为树 (Behavior Tree) + 黑板 (Blackboard) 是事件驱动的,条件写成装饰器 (Decorator),用 Simple Parallel、Services 和 Observer Aborts 代替传统并行节点;StateTree 是结合了行为树选择器和状态机转换的通用分层状态机,只在转换触发时按需选择状态,激活路径上的任务并发运行,通过属性绑定传递数据,也是 Mass 的行为层。优先级抢占多的战斗 AI 适合行为树,状态显式、分层或大规模的场景适合 StateTree。游戏开发 · UE5AI 感知、EQS 与导航AI Perception, EQS & NavigationAI 的感官层由三块组成:AI 感知 (AI Perception) 组件挂在 AIController 上监听视觉/听觉/伤害等刺激并更新黑板;环境查询系统 (EQS) 用生成器产生候选项、先过滤后打分,回答「哪里最好」;导航系统从碰撞几何生成分瓦片的导航网格 (NavMesh),按多边形代价寻路,并提供 RVO 与 Detour Crowd 避让。它们为行为树/StateTree 提供输入。游戏开发AI 感知系统概念AI Perception Concepts感知层把世界变成 AI 可决策的信念:视觉(视线、视野锥、丢失滞后)、听觉、伤害、接触等刺激,经衰减与遗忘写入知识/黑板。GEA 将其与寻路、记忆并列底层;「perception is reality」要求玩家可见结果与感知一致。游戏开发目标导向行动规划 GOAPGoal-Oriented Action PlanningGOAP 把「如何满足目标」交给运行时规划:行动带前提与效果,用 A 在世界状态空间搜索最低成本动作序列。F.E.A.R. 用极薄 FSM(Goto/Animate)执行计划,换来目标与行动解耦、行为可叠加、失败可重规划。游戏开发事件与消息传递Events & Message Passing游戏天然是事件驱动的:爆炸、玩家被敌人发现、血包被捡起都是事件,系统要通知感兴趣的对象并让它们以各自的方式处理。用虚函数 OnExplosion() 通知属于静态类型的后期绑定,迫使基类为所有可能的事件声明虚函数;GEA 主张把事件封装成对象(类型 + 参数),实现动态类型的后期绑定,从而获得单一处理函数、持久性和盲转发。GEA 依次讨论事件类型(枚举 vs 字符串/字符串 id)、参数(派生类、Variant 数组、键值对)、处理器、职责链、兴趣注册、排队与否的利弊,最后是数据驱动的事件系统和以数据通路连接端口的图形化系统(如 UE 蓝图)(GEA4 卷 II 17.8)。

被这些页面引用1 篇

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原