决策输入与动作交接
全库目录221
本文目录9
守卫正在追击敌人,敌人突然消失,下一帧又收到受伤事件。决策系统既要决定继续搜寻还是撤退,也要让旧移动真正停止,再把移动器交给新动作。只选对行为名称,还不能保证角色执行的是这次决定。
感知层提供带时间和来源的事实,决策层选择意图,执行层操作移动、动画和技能。先确定各模型的控制职责,再沿事实、动作交接、模型机制和持久提交展开,才能解释某个时刻究竟是谁在控制角色。
全文使用同一名守卫:它从巡逻进入交战,执行接近和攻击,受伤后转而寻找掩体。快照42、43、44分别表示接纳接近动作、受伤重选和取消完成后的最新事实。
本文采用单一调度器和宿主动作账本;持久日志是这套示例架构的可选工程前提。模式切换见状态机与行为树,持久恢复见决策日志与恢复。
控制关系
统一调度与控制所有者
守卫的组合路线由单一调度器提交状态。层次状态机(HFSM)保存根/平静/巡逻或根/战斗/交战、搜寻、撤退这样的活动路径。平静与战斗是容纳共享感知和目标跟踪的父状态;最内层活动模式独占计划上下文。交战树里的攻击叶推进时,HFSM仍处于交战;切到撤退才触发模式退出。父状态Enter建立共享数据,叶模式Enter建立计划上下文,两者各自只有一份配对Exit。
效用层选择目标模式与目标事实,目标导向行动规划(GOAP)或层次任务网络(HTN)生成候选步骤,行为树叶节点登记动作命令。模式还可以持有移动完成后接管的站位保持实例;保持由宿主持续更新,行为树不重复登记移动。模式退出负责结清这些持续资源。
本套示例包含组合配置和独立状态机配置。组合配置的模式进入只建立计划上下文,动作由行为树叶登记;独立配置的状态通过适配层直接登记动作,其进入可以等待动作初始化。两者都使用宿主动作账本,NPC创建时固定配置版本。状态机与行为树中的状态机例子专门展开独立配置,行为树及决策计划提交采用组合配置。
每轮先处理旧动作回执和失效事件,效用层据同一快照提出目标,再推进HFSM退出;退出完成后重新核对目标门禁,进入新模式。一轮只有一次持久提交,活动路径、模式上下文、命令归属和事件游标共同生效。需要派发的命令与查询进入同次提交的出站表,工作线程只返回候选或结果。模式进入与计划采用分属不同轮,详细提交点见决策计划提交。
决策输入与动作交接
黑板快照
黑板键保存类型、值、来源、更新时间和版本。感知更新先形成一份只读快照,决策在这份快照上完成本轮判断。遍历途中到达的普通事件进入下一轮;紧急事件通过调度入口中止当前动作。如此树的前半段不会读旧目标,后半段却突然使用另一份目标。
短期可见状态和长期记忆分开保存。敌人离开视野时,当前可见标记变假,但最后位置可以保留到记忆时限。用信念—愿望—意图模型(BDI)的术语区分这些信息:最后位置是信念,追击和自保是愿望,当前已经接受的撤退计划是意图。项目仍需规定何时放弃承诺;本套示例允许失效目标和紧急危险触发重新选择。
动作实例与独占资源
决策输出候选动作、目标和所依据的快照。执行器重新检查目标、冷却及资源,接纳后才生成动作实例ID;拒绝则返回原因。两次追击拥有不同实例,完成消息回到原实例,不能只按行为名称匹配。规划中的预期效果只有在执行成功并读取实际结果后才写入事实。
这次接近所需的目标位置、门连接和掩体预约都可能变化。快照因此保存实际读取的对象代次与字段版本,执行器在接纳时共同核对并取得资源。接纳后的目标或路线再失效,则走取消;这次启动检查并不保证未来输入一直不变。持久请求与宿主提交的详细次序在决策日志与恢复集中说明。
移动器、武器或动画通道等独占资源保存所有者ID与代次。切换动作时先向旧实例发出幂等取消,执行器停止后续副作用、释放预约,再返回取消完成。新动作在冲突资源释放后才接纳;决策可以提前准备候选,但不能提前声明它已经运行。
到达后仍需抵消平台运动时,移动完成提交可以把移动器交给模式持有的站位保持实例。原移动实例随Success结清,资源账本中的所有者变为保持实例;模式上下文保存这份持续责任。手部交互消费绑定保持实例及代次的站位事实,保持失效就停止新的交互副作用。保持器的位置纠偏、阈值及连续轨迹见导航动作交接。
旧移动取消期间收到迟到成功,只能结清旧实例。释放资源也比较所有者ID,旧清理不能清空新请求的槽。取消超时则保持占用并报告故障,候选可改用其他资源上的安全行为。已经射出的子弹属于世界事件,取消只阻止继续发射。动作ID解决消息归属,取消完成解决资源交接,两者都需要。
守卫在快照42的交战树中启动接近叶时,决策先登记命令C17,宿主接纳后才得到移动实例17。命令描述一次请求,实例描述宿主实际接纳的执行,两者之间可能隔着排队、拒绝或进程退出。行为树在收到接纳结果以前保存“等待C17接纳”,不能因为尚无实例ID就再次Enter。动作已经运行以后,才适用上述取消与资源交接。持久登记与恢复的具体次序见决策日志与恢复。
执行身份
同一守卫同时保存选择、计划和执行进度,完成消息必须定位到其中的具体实例。
| 身份 | 保存者与用途 | 变化边界 |
|---|---|---|
| NPC实例ID | 调度器,区分销毁后重建的守卫 | 实体重建时变化 |
| 模式实例ID | HFSM,拥有一次进入到退出的计划上下文 | 重新进入模式时变化,同模式重规划保留 |
| 计划代次 | 模式上下文,区分目标和计划的修订 | 重规划或撤销旧计划时递增 |
| 树实例ID | 计划执行器,定位根和叶的生命周期 | 安装新执行树时变化 |
| 命令ID | 叶与持久出站表,描述一次稳定请求 | 新请求时生成,补发保持 |
| 动作实例ID | 宿主执行账本,记录接纳后的实际执行及资源所有者 | 首次接纳时生成,恢复继续跟踪原实例 |
| 保持实例ID与站位事实代次 | 宿主与模式上下文,记录移动完成后持续维持站位的所有者及其可消费事实 | 移动交接时建立;保持失效、恢复有效或结束时推进事实代次 |
| 运行纪元与查询尝试号 | 恢复入口与查询调度器,拒绝旧执行者或旧尝试的实时返回 | 接管或授权重试时变化,历史记录沿原身份回放 |
表中的计划与树身份补充了开头的命令及动作身份:模式在Planning等待候选,采用后执行树才活动;同模式重规划保留模式实例,替换计划代次与树。
守卫取得移动控制权后,哪些事件能够改变当前模式,由状态机与行为树中的状态机规则决定;行为树负责模式内部的多步执行。
实现与证据
本文为机制设计与状态推演,完整NPC框架、异步动作和持久恢复尚未接入运行。相关机制片段的局部验证见效用评分与目标规划。
相关主题
参考资料
本文的动作账本、版本与提交次序属于示例架构。行为树的引擎来源见状态机与行为树,目标规划原始实践见效用评分与目标规划;它们不直接规定本文持久协议。