unity动画之BlendTree


                      实现的效果:人物在跑的状态下,才能进行转弯操作,和跳起动作。

   1:  unity中的动画混合树可以将几个动画文件很好的融合在一起其中Run是状态树:                                                                                                                                                                                                                                                        

                                                                                        

          参数Direction是浮点类型。上面概述为:动画状态可以是单个的动画文件,也可以是由动画文件融合成的状态树。勾选automate threshold可以修改thresl临界值


      2:第一步已经在unity面板中把先关参数配置好了,现在就需要用脚本来设置相关参数条件的实现。

using UnityEngine;
using System.Collections;

public class BlendTree : MonoBehaviour {

    protected Animator animator;
    public float DirectionDamoTime = 0.25f;
	void Start () {
        animator = GetComponent<Animator>();
	}
	
	
	void Update () {
	
        if(animator)
        {
            AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
            if (stateInfo.IsName("Base Layer.Run"))//注意这里必须是Base Layer.Run   Base Layer是动画层的名称,用.的形式引出当前准备切换动画的动画状态名称
            {
                if (Input.GetKeyDown(KeyCode.Space))
                    animator.SetBool("Jump", true);
            }
            else
            {
                animator.SetBool("Jump", false);
            }
            //在奔跑时才可以水平旋转
            float horizontal = Input.GetAxis("Horizontal");
            animator.SetFloat("Direction", horizontal, DirectionDamoTime, Time.deltaTime);
           
            //控制idle到跑状态的切换
            if (Input.GetKeyDown(KeyCode.W))
            {
                animator.SetFloat("Blend", 1.0f);
            }
            else if (Input.GetKeyUp(KeyCode.W))
            {
                animator.SetFloat("Blend", -0.1f);
            }
        }
	}
}

3:基本概念, 第二个参数如果变为负值可以修改动画运动的方向。动画混合树,实际上也是一个动画状态单元,和普通的动画状态不同的是,他可以混合多个动画。

4:在BlendTree 的2D融合图中:

                                                                

设置为-1  可以让动画反向播放,在有向前走而没有向后走的动画时。


5:2D融合图的操作步骤:

            1:在动画控制器中,建立默认状态为BlendTree


            2:type选择2D,parameter自己创建参数,此参数会在脚本中运用到,并将四个动画文件子对象的相关位置设置好之后,在unity面板中的配置就完成了:


           3:脚本的控制:

using UnityEngine;
using System.Collections;

public class BlendTree2D : MonoBehaviour {

    private Animator ani;
    public float xDampTime = 1.0f;
    public float yDampTime = 1.0f;

    //动画参数的系数
    float xVal = 1.5f;
    float yVal = 1.5f;

	void Start () {
        ani = gameObject.GetComponent<Animator>();
	}
	

	void Update () {
	
        if(ani)
        {
            float h = Input.GetAxis("Horizontal");
            float v = Input.GetAxis("Vertical");

            ani.SetFloat("ValX", h, xDampTime, Time.deltaTime);
            ani.SetFloat("ValY", v, yDampTime, Time.deltaTime);
        }
	}
}

          这样就能很好的对角色进行,前进,后退,左右运动的控制了。

4:数值的大小,影响着动画播放的快慢。越小播放越快。。动画融合就是设置权重的大小将动画进行融合

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页