AnimatorController动画融合树

通过Unity动画状态机,能帮我们轻松处理转换各个动画片断,达到想要的效果,但是如果仅仅是一个个动画的硬生生的切换,那么看起来就非常突然,而不真实了,在质量要求比较高的游戏中,特别是动作游戏,我们就不能直接简单地用Translation连起来了,而应该使用动画融合树。

准备工作:一个人物模型,一个待机动画,一个行走动画,一个奔跑动画。

通常游戏中,我们人物从待机到跑直接切换就行,今天我们加一个行走的过渡效果吧。
创建一个动画控制器AnimatorController,将人物的Animator组件的Controller属性指向我们刚才创建的AnimatorController。
在AnimatorController中添加一个空状态Idel,然后设置动画片断为我们的待机动画。
然后再创建一个动画融合树WalToRun:
无标题
双击融合树进入编辑状态,在右侧的Inspector面板中的Motion列表中添加两个元素,从上到下依次选择我们的行走动画和奔跑动画。
创建float类型动画参数Run,将融合树的Parameter参数设置为Run:
QQ截图20151007164124
最后,将待机状态Idel使用Translation连接到融合树,设置Condition参数为 Run Greater 0.1,反过来融合树到Idel的连接Condition设置为 Run Less 0.1。

一切就绪,在Player身上添加脚本DearMove:

 1 using UnityEngine;
 2 using System.Collections;
 3  
 4 public class DearMove : MonoBehaviour
 5 {
 6     private Animator anim;  //动画状态机
 7     private int RunFloat;   //Run参数ID
 8     private float vertical; //前进
 9  
10     void Awake ()
11     {
12         anim = gameObject.GetComponent<Animator>();
13         RunFloat = Animator.StringToHash("Run");
14     }
15      
16     void Update ()
17     {
18         //呼叫方向控制
19         vertical = Input.GetAxis("Vertical");
20         //根据前进控制,设置Run参数的值,
21         //后面两个参数可不加,这里是为了让从走到跑看得更明显
22         anim.SetFloat(RunFloat, vertical, 1f, Time.deltaTime);
23     }
24 }

运行游戏,按住 W 键,可以看到Player从走慢慢过渡到跑咯!

原文地址:https://www.cnblogs.com/zhenlong/p/4870956.html