当前位置: 首页 > ops >正文

UE的AI行为树Selector和Sequence如何理解

在 Unreal Engine 的行为树(Behavior Tree)中,SequenceSelector 都属于“复合节点”(Composite Nodes),它们负责控制子节点的执行流程。可以把它们类比成程序里的“逻辑运算符”:


1. Sequence(序列节点)

  • 执行逻辑:从左到右依次执行它的每个子节点,

    • 如果某个子节点返回 Failure(失败),整个 Sequence 就立即返回 Failure,不再执行后续子节点。

    • 只有当所有子节点都返回 Success(成功)时,Sequence 才返回 Success

  • 用途:用来描述“并且”关系的行为流程——只有前面的动作都成功了,才继续下一个动作。

  • 示例

    1. 检查玩家是否在视野内(检测节点)

    2. 向玩家移动(移动节点)

    3. 执行攻击(攻击节点)

    如果第 1 步检测失败(玩家不在视野内),Sequence 立即失败,AI 不会执行移动和攻击。


2. Selector(选择节点)

  • 执行逻辑:同样从左到右依次执行它的每个子节点,

    • 如果某个子节点返回 Success,整个 Selector 就立即返回 Success,不再执行后续子节点。

    • 只有当所有子节点都返回 Failure 时,Selector 才返回 Failure

  • 用途:用来描述“或者”关系的行为分支——只要有一个动作成功,就当整体成功。

  • 示例

    1. 如果血量低(检测节点),则执行“寻找回血点”

    2. 否则如果看到敌人(检测节点),则执行“攻击敌人”

    3. 否则执行“巡逻”

    — 当第 1 步检测到血量低,Selector 返回成功,AI 直接去回血,不会再判断看到敌人的分支。


  • Sequence:只要遇到失败就“短路”(short-circuit)返回失败。

  • Selector:只要遇到成功就“短路”返回成功。


3. 使用建议

  • Sequence 常用在“完成一系列步骤”场景,比如:开门 → 进入房间 → 拾取物品。

  • Selector 常用在“多种策略可选”场景,比如:如果能攻击就攻击,否则就去巡逻;如果看见敌人就追踪,否则就隐藏。


掌握了这两者,就能灵活地搭建出复杂的 AI 行为逻辑:用 Sequence 组合必须按顺序完成的动作,用 Selector 划分不同的行为分支。这样既清晰又易于维护。

http://www.xdnf.cn/news/12813.html

相关文章:

  • 数据结构——D/串
  • comfyui 工作流中 图生视频 如何增加视频的长度到5秒
  • C++ - string 的使用 #auto #范围for #访问及遍历操作 #容量操作 #修改操作 #其他操作 #非成员函数
  • Vivado软件开发流程操作详解
  • 五年级数学知识边界总结思考-下册
  • 【会员专享数据】1980—2022年中国逐日月年潜在蒸散发栅格数据
  • JavaScript 数组学习总结
  • Spyglass:跨时钟域同步(时钟门控单元)
  • eBPF系列--BCC中提供的BPF maps高级抽象如何映射到内核的BPF maps?
  • 【Ragflow】27.RagflowPlus(v0.4.1):小版本迭代,问题修复与功能优化
  • 比较一组结构之间的变换
  • Python爬虫实战:研究PySocks库相关技术
  • Halcon案例(三):C#联合Halcon识别排线
  • 【整数逐位除法求余补〇完整版】2022-4-11
  • 1 Studying《Linux Media Documentation》
  • 深度学习模块缝合
  • 【redis】线程IO模型
  • 第16届蓝桥杯青少Stema11月 Scratch编程——初/中级组真题——行走的图形
  • GD图像处理与SESSiON
  • MySQL(63)如何进行数据库读写分离?
  • 进程与线程的区别
  • SQL Server从入门到项目实践(超值版)读书笔记 16
  • Linux多线程-进阶
  • 设计模式学习
  • AtCoder Beginner Contest 409
  • Continue 开源 AI 编程助手框架深度分析
  • C++17 和 C++20 中的新容器与工具:std::optional、std::variant 和 std::span
  • 学习python做表格6月8日补录
  • B站_Miachael_ee_通过GDB和OpenOCD对ESP32 进行JTAG Debug_笔记1
  • Python Day46