天天育儿网,内容丰富有趣,生活中的好帮手!
天天育儿网 > unity简单实现融合树动画

unity简单实现融合树动画

时间:2020-01-07 14:34:30

相关推荐

unity简单实现融合树动画

本篇博客将简单介绍用状态机制作行为树动画,我将用这个行为树去简单的控制人物移动,待机和后退,和左右转头。尽量用最少的代码,实现最丰富的功能。

行为树:又称为混合树,一个流行的AI动画技术,涵盖了层次状态机,事件调度,事件计划,行为等一系列技术。在高度模块化状态,去掉状态中的跳转逻辑,使状态变成一个行为,称之为行为树。

在博客中我会用实例去展现行为树的魅力和优势所在,好戏开始:

首先看一下最终效果:

融合树动画

普通Animator动画

通过上面两种动画的对比,我们可以看出其中的差距,行为树的动画看起来更加自然流畅一下,让人感觉不到切换的突兀感,觉得整个动画就像一个人物在做某些行为,而普通动画在切换的时候可以看到,非常突兀,当然也可以进行细节处理,但综合起来要比行为树麻烦太多。

这时有读者可能就会问,图一控制了前,后,左,右,左转头,右转头,并且转头和移动结合了起来,代码会不会很复杂? 不会,放心,当然不会!全程只有四句代码。 图一和图二同样都只用了四句代码,没错!就是四句代码,就轻而易举的控制了这么复杂的动画的切换,和移动。而普通Animator动画和行为树动画比起来却差了这么多,没有转头的动画,也没有移动转头的结合,更没有流畅自然的动画,所以,这就是行为树的优势所在。

呦,还不信?

回首~

掏~出来让你们看看

真的只有四句代码

下面贴出移动和控制动画神奇的源码:

/// <summary>/// 状态机/// </summary>private Animator animator;//转换速度标签private int SpeedID = Animator.StringToHash("Speed");//把字符串转换为哈希IDprivate int VerticalID = Animator.StringToHash("Vertical");private int HorizontalID = Animator.StringToHash("Horizontal");void Start () {//获取状态机animator = GetComponent<Animator>();}void Update () {//计算速度 播放动画animator.SetFloat(VerticalID, Input.GetAxis("Vertical"));animator.SetFloat(SpeedID, Input.GetAxis("Horizontal"));//在动画树里 X代表Z轴 Y轴代表X轴 transform.localPosition += transform.forward * Time.deltaTime *Input.GetAxis("Vertical") * 3;transform.Rotate(transform.up * Time.deltaTime * Input.GetAxis("Horizontal") * 90);

核心代码只有Update里四句,好了下面一起来制作一个简单的行为树动画吧!

1.首先我们需要创建行为树,和创建float类型的参数,Vertical 代表前后 Horizontal代表左右。

2.双击Blend Tree行为树进去,会显示如下界面:

这里我们需要添加些动画,我这里添加了5个

3.我们选择Compute Position—X Position From—Angular Speed(Deg)把旋转设置为根据度数,通过人物的朝向来融合旋转动画。(这个千万要记得设置,不然旋转度数可能会出问题)

参数介绍:

Blend Type:选择动画的类型,1D代表一个参数,可通过一个参数控制动画。

2d代表两个参数,通过两个参数控制更多的动画融合。

Paeameters:参数选择,1D能设置一个,2D能设置两个。

至于为Pos x要取1到负一,因为轴系参数的取值就是1到-1,最大1 最小-1,默认为0,所以这里1为奔跑,0为待机,-1为后退。

第二个参数用来控制旋转,当Y的旋转度数大于等于-1时,播放向左转头动画,为1时,右转头。

回顾一下步骤,

1.创建脚本,写好神奇的四句代码。

2.创建融合树,设置参数。

3.调试参数。

试着跑起来吧!

原创出品,转载请注明出处。

喜欢我关注我,我是壹叶成名。

如果觉得《unity简单实现融合树动画》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。