Unreal Engine 中的动态上下文
使用动态上下文,让 AI 角色实时感知游戏状态、玩家动作和环境。
本指南假设你已经 Convai Unreal Engine 插件 安装,并且场景中已经设置好了一个由 Convai 驱动的 AI 角色。如果没有,请参考 安装和设置文档.
Dynamic Context 是 Convai 的一项功能,它可以为你的 AI 角色提供游戏中正在发生的一切的实时信息流。与只会回应玩家所说内容的角色不同,Dynamic Context 使角色能够对虚拟世界的实际状态作出反应——分数、库存变化、环境事件等等——这些内容都会以命名变量的形式被跟踪,并实时注入到角色的推理过程中。
关键蓝图函数
调用语音
触发角色主动发言
场景开始、脚本事件
Add Context Event
向角色发送一次性事件通知
离散状态变化(例如玩家捡起武器)
设置上下文状态
跟踪一个可持久化、可递增的变量
持续计数(例如得分、发射的子弹数)
获取上下文状态值
获取已跟踪变量的当前值
在递增计数器之前
响应模式
每个 Dynamic Context 函数都允许你控制角色在接收更新后是否发言:
始终
角色在更新后立即发言
值得回应的一次性事件
Auto
由角色自行决定何时评论
重复发生的事件,例如命中得分
从不
上下文会被静默记录,不会触发响应
高频事件,例如发射子弹
教程:虚拟射击场
下面的演练使用一个虚拟射击场来同时演示这三个 Dynamic Context 函数。该场景包含一个 MetaHuman 教官角色、一把可拾取武器,以及一组目标圆锥。
步骤 1 — 在场景加载时触发欢迎信息

在场景中选择你的 AI 角色,然后点击 编辑蓝图.
在 开始游戏 事件,然后获取
Convai Chatbot 组件.调用 调用语音 并设置一个
触发消息用于描述开场场景——例如: “欢迎玩家来到虚拟训练场。保持简洁。”留空 生成操作 是位于 在网络上复制 已禁用(仍在开发中)。
编译并保存。
添加 “保持简洁” 到你的触发消息中,可以防止角色发表冗长的开场独白。欢迎信息应当快速让玩家了解情况。
步骤 2 — 当玩家捡起武器时通知角色

使用 Add Context Event 用于离散的一次性状态变化。
选择 武器 Actor 在你的场景中,然后点击 编辑蓝图.
找到 重叠事件 用于处理拾取机制——具体来说,是在 Actor 自我销毁之前将武器组件添加到玩家的节点序列。
在 Destroy Actor 节点之前,添加对
Convai Chatbot 组件的引用,使用 Get First Convai Chatbot Component.调用 Add Context Event 并设置消息: “玩家已经捡起了枪。”
设置 响应模式 到
始终——这是一个重要的状态变化,值得立即确认。将该节点连接到你现有的执行链中,然后编译并保存。
原因 Add Context Event 而不是 设置上下文状态? Add Context Event 用于只发生一次且不应累积的事情——是通知,不是计数器。 设置上下文状态 用于角色需要跨多个回合跟踪的变量。
步骤 3 — 跟踪击中的目标

使用 设置上下文状态 ,并使用递增逻辑为角色提供一个击中目标的持续计数。
选择一个 目标圆锥 并点击 编辑蓝图.
滚动到 事件 并添加 On Component Hit ——每当圆锥被投射物击中时都会触发。
获取
Convai Chatbot 组件并调用 设置上下文状态.将变量名设置为
targets_shot.对于值,实现递增逻辑:
复制 Chatbot Component 引用并调用 获取上下文状态值 ,名称为
targets_shot.添加一个 Branch 节点:
找到: 使用 String To Integer,则添加
1将返回的字符串转换为整数,并将结果输入到设置上下文状态值引脚。未找到: 传入
1作为初始值。
设置 响应模式 到
Auto——角色会自行决定何时评论,而不是每次命中都发言。编译并保存。在场景中的所有目标 Actor 上重复此蓝图(或者使用父类来共享逻辑)。
步骤 4 — 跟踪发射的子弹数

静默跟踪子弹数量,这样角色就可以在不打断游戏流程的情况下计算命中率。
打开 BP_WeaponComponent (位于你的第一人称蓝图下)。
找到 Left Mouse Button 生成投射物的事件。
复制完整的
设置上下文状态步骤 3 中的递增逻辑,并将其粘贴到这个蓝图中。将变量重命名为
bullets_shot.设置 响应模式 到
从不——角色应记录子弹数量,而不是每次开火都说话。编译并保存。
在 targets_shot 是位于 bullets_shot 两者都跟踪后,角色现在可以在任何回合计算命中率,而无需你在任何地方编写该逻辑。例如:6 发中击中 3 个目标 → 角色会自动得出 50%。
步骤 5 — 添加视觉,让角色能够看到环境

Dynamic Context 覆盖角色 知道的内容 关于游戏状态的信息。Vision 覆盖角色能够 看到的内容.
选择你的 AI 角色并点击 编辑蓝图.
在 组件 面板中,点击 + 添加 并搜索
Environment Webcam。将其添加到角色中。在 视口,将
EnvironmentWebcam组件放置在角色的眼睛高度,并略微向前推,以避免与网格发生碰撞。在 内容浏览器,创建一个名为
convai_vision.在其中,右键单击 → Convai → Create Vision Render Target。将其命名为
RT_Vision.返回角色蓝图,选择
EnvironmentWebcam组件,并设置 Convai Render Target 到RT_Vision.启用 Auto Start Vision.
编译并保存。
渲染目标现在会准确显示角色所看到的内容。玩家可以提出如下问题 “你看到了多少个目标?” ,角色会根据自己的摄像机视角进行计数——无需预先编写脚本。
Dynamic Context + Vision 结合起来: Dynamic Context 告诉角色游戏中发生了什么。Vision 告诉角色它面前有什么。两者结合使用时,角色既具备态势感知,也具备环境感知。
超越射击场
同样的蓝图模式可以推广到任何项目:
培训模拟 ——跟踪哪些流程已完成,实时标记遗漏步骤,让 AI 评估器参考完整会话并按评分标准给出分数。
RPG 和开放世界 ——跟踪任务进度、阵营声望、收集的物品。NPC 会对玩家实际的游戏状态作出反应,而不是脚本化的分支树。
多人游戏 ——每个玩家会话都有自己的上下文;角色可以根据分数或交互历史直接与单个玩家对话。
企业模拟 ——在合规或销售场景中跟踪受训者的响应,并自动发现差距。
最后更新于
这有帮助吗?