U_行为树插件 Behavior Designer

1、插件名称: Behavior Designer - Behavior Trees for Everyone

2、使用步骤:

1、挂载脚本 Behavior Tree

2、自定义行为树脚本 - 参考官方文档

3、在参数界面里设置一个叫做Player的参数,Type点开,改成GameObject

4、在Task界面找到刚才自定义的节点,拖出来连上Entry

5、此时你运行游戏,你会发现行为树的参数能获得角色了

6、当玩家在视野里会被敌人跟随

上图有两个新节点,当你加上Within Distance节点的时候,你会发现敌人周围多了个圈,这个圈的意思是,当Target(玩家)进入圈内,就会执行右边的节点

但是,如何告诉节点Target是玩家呢,刚才我们不是写了个自定义节点叫做获得Player了,并把Player的GameObject给了一个参数,所以我们按照下图设置就可以让敌人知道Player是谁了

Seek节点的意思是追角色,也有参数设置,具体大家自行研究了,但是需要注意的是,里面有个Target参数,需要指定给player

此时运行游戏,你会发现,当你进入区域后,敌人会对你紧追不舍,就算你脱离了区域,敌人依然追你,这个要怎么解决呢

脱战功能

点击如图节点,设置Abort Type为Self,再运行下游戏,就会发现你离开敌人区域后会脱战了

虽然很简单,但是这个是什么意思,这里就要说下Abort Type

这个可以理解成强行打断Sequence,默认是None

为None的时候,也就是不设置打断,比如运行到敌人追你,就会一直追,除非追到你否则不会停下来

为Self的时候,会打断自身,比如检测范围的节点为False时,就会打断节点,让敌人不追你了

Lower Priority,高优先级的Sequence为True,会打断低优先级执行高优先级,什么叫高优先级呢,在行为树里,左边的节点比右边的优先级高

Both,当然就是上面两个一起执行,即可以打断自己,也会被高优先级打断

脱战回到原点

我希望敌人脱战后可以回到自己的初始地点

1、创建一个V3变量,并在开始时存储角色的位置

2、修改节点,主要是增加了个Get Local Position节点,获得角色的位置

3、节点里的参数设置中,Target为空,意思就是Self,即自身,然后我们把这个节点传递给StartPos

4、后面的IDLE节点意思是挂起,等待角色进入范围,如果不加IDLE,这个行为树就运行结束了,但是此时的节点有问题,你会发现程序卡IDLE上了,所以我们进行一些修改和调试

我们的目的是,敌人没发现你时运行IDLE,发现你后开始SEEK

上面的节点多加了个Selector节点,以及将Idle左边的Sequence改成了Both模式,Selector的意思是,当第一个节点不成立时,会继续执行下一个,而Sequence设置成Both,就会不断检测角色是否进入区域,一旦进入打断右边低优先级的Idle

攻击主角
通过上面的内容,应该对节点都比较理解了,所以接下来会加快速度直接给答案

补充

如何让角色移动的时候播放行走动画?

可以在Animator里面设置参数WalkSpeed

给敌人一个脚本,注意需要引用using UnityEngine.AI;

在动画里设置一个混合动画(如果不会找别的教程)

这样敌人行动起来就可以播放动的动画了

敌人可能出现莫名其妙的自转?

下图位置打勾

行为节点解释博文:
https://blog.csdn.net/qq_39169598/article/details/89429967

posted @ 2023-07-07 10:44  匿鱼  阅读(428)  评论(0)    收藏  举报