行为树(Behaviour Tree):概念,AI

行为树(Behaviour Tree):概念,AI

--掌握行为树的方法

  1. 起源,为了解决什么问题
  2. 发展历史,解决了什么问题,怎样解决的
  3. 概念,抽象出了哪些东西
  4. 应用,需要给行为树的需求分类,掌握不同类型的需要最适合的行为树实现
    1. 通用的行为树工具,能力范围,扩展方式
    2. 特定游戏类型的行为树工具,能力范围,扩展方式
  5. 实现,各类行为树的实现方式
    1.通用的代码组织方式,代码能力范围
    2.特定游戏类型的代码组织方式,代码能力范围

--认识行为树
升级版的fsm
更灵活,可配置性更强,可以让game designer方便的参与逻辑编写

--实现方案
数据结构中的行为树

--概念收集和解读,这些概念主要来自于"ai分享站",感谢作者无私分享

  1. 决策(Decision)
    1. 根据输入选择行为
  2. 行为(Behavior)
    1. 具体输出,改变程序状态,具体来说,操作多媒体,视觉特效,和其它模块交互
  3. 逻辑动作(Logical Action),行为池(Behavior Pool)
    1. 一系列的行为
  4. 单一行为(Simple Behavior)
  5. 复合行为(Composite Behavior)
    1. 序列(Sequenece):一个个行为接着做
    2. 并行(Parallel):两个或多个行为同时进行
    3. 选择(Selector):从候选行为中选择一个执行,包括脚本选择,和随机选择
  6. 控制节点(Control Node)
    1. 同决策
  7. 行为节点(Ternimal Node)
    1. 同行为
  8. AI中的共享数据,如blackboard
    1. 共享数据方便
    2. 共享数据不容易维护
      1. 因为多人协作,变量可能重复,导致混乱
      2. 访问匿名,无法方便的找到依赖
    3. 使用共享数据需要制定使用规范
  9. AI中的LOD
    1. 不需要决策的停止
    2. 不需要频繁决策的,降低决策频率
    3. 注:lod: level of detail缩写,在渲染优化中,如果一个物体距离摄像机越近,那么就让它显示的细节越多,否则细节越少。从而减少渲染的量,提升性能。
  10. AI中的双缓冲
    1. 当事件发生,决策层进行处理,这个处理过程可以跑在别的线程
    2. 处理完的结果做完行为层的输入
  11. AI中的Lazy
    1. 当边界条件频繁变换时,ai快速响应变换,像一个傻瓜,lazy让ai淡定许多,不那么傻了
    2. 方法
      1. 定时器,ai收到world信息后过一段时间再处理
      2. 渐变阈值,world在某个边界变化的时候,让一个值不断收缩,如果边界又变化了,从新收缩,直到不再变化,收缩到一个值后,ai就会进行决策和行动
  12. AI调试
    1. 时机:调整ai行为,解决ai bug
    2. 尽量使用:脚本,参数配置
    3. 编辑器,解决编译缓慢问题,分离逻辑,运行时调整
    4. 观察器,运行时查看参数
    5. 远程命令,发送一段指令给引擎,使其执行相应的函数
    6. 回放,为了复现ai的问题,依赖引擎,需要制定良好的ai架构
    7. 游戏世界环境,决策层执行指令序列(用于分析行为)
  13. AI势力图
    1. 一般是一个二维数组
    2. 存放地图上某个格子的权值
    3. 可以过去或者不可以过去的程度
    4. 动态地图寻路算法会用到
    5. 势力图动态更新
    6. 可以用在A*算法求路径上
  14. 行为节点的状态,processing, successed, failed
  15. BT的执行流程
    1. 从根节点出发,寻找一个可执行节点,从那个节点开始执行
  16. 选择节点
    1. 优先级型,从左往右逐个测试,执行条件逐渐放宽
    2. 非优先级型,每次从上一个执行的节点开始测试准入条件,用互斥避免节点被屏蔽
    3. 权重型,根据权重做概率选择
  17. 并行节点
    1. 需要解决该父节点的状态是怎么由并行的子节点状态确定的
  18. Blackboard
    1. 封装行为树的输入
    2. 行为树间共享数据
    3. 节点间共享数据
    4. 根据上述的使用情景,一般有多个黑板
  19. 层次状态机 hfsm
    1. 解决负责状态机跳转关系混乱问题
    2. 把跳转分组,每组间相互跳转,组内状态相互跳转,如果组内还是负责,继续在组内分组
  20. 调控AI的难度
    1. 调整ai的感知能力
    2. 调整ai的决策能力
    3. 减少对特殊情况的处理
    4. 放宽条件,收窄条件,减少对玩家不利的行动
    5. 调整ai的行动能力
      1. 武器,速度,伤害,基本种类和程度的变换
  21. goai,目标导向的ai
    1. 适用于持续型的ai,不需要频繁决策
    2. 需要plan模块,分析实现目标需要做什么,检查是否做完,标记进度
  22. 游戏世界信息的收集和组织
    1. 信息图,游戏ai决策用到的世界信息图表,一般是二维数组
    2. 危险程度
    3. 优先程度
    4. lazy collect,不是每次世界更新都要更新信息图,ai用到的时候再去收集
    5. 分块,大的信息图进行分块,每次先选定要那一块的信息,然后让那一块的感知器进行收集
    6. 信息图共享,不同ai共享信息图
  23. 状态机转行为树的范式
    1. 模式1:当处在任何状态中,一旦某条件满足,即跳转到某个特定的状态:selector
    2. 模式2:对于同一个跳转条件,处在不同的状态会有不同的跳转:selector,sequence
    3. 模式3:根据条件跳转到多个状态,包括自跳转
      1. sequence selector
      2. selector
    4. 模式4:循环跳转:交替权重的selector
  24. 可预测的行为系统
    1. 某些情况下,决策层需要知道如果选择了某个行为未来某个时间的世界信息,此时需要行为层提供预测能力
    2. 基于预先设置的公式的预测
    3. 基于动画系统的预测,如果是动画系统会改变world信息,这个就需要做更多工作导出会造成的影响
  25. 被动式请求:不是玩家主动触发的行为,如:跑,跳,技能 是主动请求, 绊倒,掉血,死亡,装弹药
    处理方式
    1. 被动请求(如果有),主动请求(如果有)同时传递给选择模块,此处,选择模块在决策模块之后运行,被动请求由游戏世界直接产生
    2. 主动请求是决策的输出
    3. 在行为树的决策层中加入selector,world导致的改变不直接产生请求,而是改变决策层的状态,每次决策时决策层输出请求给行为层
  26. 设计ai中的参数系统
    1. 方便设计人员工作,减小不同工种粘合度
    2. 参数数据和文件可以互转
    3. 关联变换,静态的数据关联改变,不用计算公式运行时计算
      1. 注:这样数据的观测性好,但是不如直接提供一个查看器,我支持简单数据运行时计算的做法
  27. 共享节点型行为树
    1. 为了节约内存,行为树的逻辑结构部分抽离出来做为共享对象使用
    2. 定义一下这个共享的部分
    3. 表示行为树的结构信息,如sequence, selector, parallel的组织方式,表达了处理的流程

你可能感兴趣的:(行为树(Behaviour Tree):概念,AI)