首页 / 资讯中心 / 文章详情

游戏AI决策引擎怎么组合:先约定谁能中断谁

游戏AI决策引擎怎么组合:先约定谁能中断谁 ★ FEATURED ARTICLE
行为树、GOAP和HTN经常被画成一条进化路线好像换到更复杂的算法角色就会更聪明。实际接入时一个更早的问题是旧任务还没停新任务能不能开始如果移动任务持续写位置闪避任务又开始写姿态哪怕两个规划器各自都正确合起来也可能互相覆盖。先把执行权和取消语义讲清楚比继续往图上堆“认知层”更有用。四种方法回答的问题不同FSM适合有限模式及明确转换行为树组织条件和动作的优先关系GOAP从动作前提与效果搜索满足目标的序列HTN利用领域方法把大任务拆成小任务。它们可以共存但共存需要共享动作接口而不是把一个算法的节点直接当另一个算法的结果。例如上层规划器给出“调查仓库”下层动作需要给出开始、继续、成功、失败、取消几个明确状态。“移动成功”不能只表示路径规划结束也不能默认等于角色已经到达。中断要包含资源释放Unreal行为树文档明确区分了事件驱动、观察者中断和并发行为并提醒概念上的并行不必是多线程。这意味着不能仅凭一个Parallel节点就推断动作会安全地并行执行。一个可检查的协议是旧任务停止继续发命令撤销未消费命令释放其导航或动作所有权然后新任务获得执行权。取消不能只把节点状态改成Failure旧的异步寻路回调也必须识别它所属的任务已经过期。把失败责任留在正确的层目标不可达由导航层报告任务不再需要由规划层取消对象销毁由实体生命周期处理。不要让语言模型临时编一句“正在重试”就把这三类失败混成无限重试。下面的模型故意只有一个命令槽。它没有模拟完整行为树只观察切换任务时的先后顺序。多个子系统确实需要并行时可以分别管理上半身、位移、目光等资源但同一资源仍需要唯一写入者。先撤销旧移动命令再开放闪避分支图中的三个快照表示先后步骤而非三个角色同时运行。把关键规则缩成一个可运行例子下面使用 Python 3 标准库表达算法规则保存为example.py后运行python3 example.py。它便于观察输入和输出不替代引擎中的 C、Shader 或模型实现。class Executor: def __init__(self): self.owner None self.commands [] self.events [] def start(self, task): if self.owner is not None: self.events.append(cancel: self.owner) self.commands.clear() self.owner task self.commands.append(task) self.events.append(start: task) e Executor() e.start(move) e.start(dodge) assert e.commands [dodge] assert e.events [start:move, cancel:move, start:dodge] print( - .join(e.events))本例输出start:move - cancel:move - start:dodge测试应继续覆盖取消两次、任务已经成功后再取消、旧回调在新任务开始后到达。真正的引擎适配层也许不能立刻停止动画但必须清楚报告“正在取消”与“已经取消”不能让上层误以为执行权已经释放。适用范围单线程离线例子验证的是命令替换顺序未验证Unreal节点生命周期、网络同步、动画混合或多线程执行。相关资料Unreal Engine行为树概览
阅读完成 · 觉得有帮助?
咨询建站