状态机和行为树

对游戏NPC的行为控制一般有2种,一种是状态机,一种是行为树。

状态机:

Unity对人物动画的控制是基于状态机的,如下图:

可以看到,每个状态除了包含自身的状态行为外,还需要和其他的状态打交道,需要输入状态机之间切换的条件。因为这一点,导致增加状态会使得状态机越来越复杂。

状态机是一种网状结构,耦合性很大。

行为树:

1、行为树是将游戏NPC的行为(走动,攻击,跳跃)搭建为一颗树,父节点是行为分支,叶节点是行为的具体表现。

2、行为树将NPC的行为包装为一个对象,符合面向对象的设计理念。

3、行为树的好处是将行为逻辑和状态数据剥离,降低耦合,方便策划配置,而无需对每个人物的行为进行代码控制,提高了可视性,简化问题排查,提高效率。

4、行为树把行为和状态数据剥离,可以这么理解,比如NPC要跳跃,那么前提条件可以是:已完成上一个动作,HP大于0,下一个行为状态设置为跳跃。把这些条件看作状态数据,把跳跃的Animation看做行为,那么当要切换行为的时候,就不用去管上一个状态是什么行为、和上一个状态是什么关系。构建出来的行为树,只需要判断当前的状态数据是否满足跳跃的条件,满足就执行行为,不满足就返回false。

5、行为树是树状结构,相对于状态机的网状结构来说耦合性更低。

6、行为树的子节点执行时需要返回,返回类型有:False,True,Running。

7、行为树的父节点存在多个情况,1个节点和多个节点,当父节点有多个字节点时,有几种组合顺序:

并行执行:并行执行多个子节点的行为。

随机执行:从多个字节点中随机选择一个执行。

选择执行:从多个字节点中按照顺序选择一个能执行的行为。

顺序执行:按照顺序依次执行多个子节点。

  • 11
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值