Unity Animator动画状态机 深入理解(一)

接触Unity以来就已经有了Animator,Animation用的少,不过也大概理解他俩之间的一个区别于联系。

图中其实就是Animator和Animation之间的区别于联系了,啊!你肯定会告诉我这就不是Animator么。

对啊,Animator其实是由Animation组成的。比如在Animator没有出现的时候有些公司写的动画状态机其实就是代码版的Animator。

Animator其实就是把Animation统一管理和逻辑状态管理的组件,而Animation就是每一个动画。

动画状态机推荐游客学院的一篇教程。

 

Animator给了我们更方便的图形化状态管理。但是你想不写代码,还是不行。

但是代码会方便许多,用一个脚本就可以管理整个Animator状态机了~

其实也是角色执行的逻辑状态机~

using UnityEngine;
using System.Collections;

public class AnimatorMove : MonoBehaviour {

    public float DirectionDampTime = .25f;
    private Animator animator;
    
    void Start () {
        animator = GetComponent<Animator>();
    }
    
    
    void Update ()
    {
        if (animator == null) return;

        AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
        if (stateInfo.IsName("Base Layer.Run"))
        {
            if (Input.GetButton("Fire1"))
                animator.SetBool("Jump", true);
        }
        else
            animator.SetBool("Jump", false);
        if (Input.GetButtonDown("Fire2") && animator.layerCount >= 2)
            animator.SetBool("Hi", true);
        else
            animator.SetBool("Hi", false);
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        animator.SetFloat("Speed", h * h + v * v);
        animator.SetFloat("Direction", h, DirectionDampTime, Time.deltaTime);
    }
}

这是一段比较简单的人物控制脚本,能控制人物的跑跳和打招呼。

其实就是控制一下过度的条件经过什么的操作是否允许过度。

 

通过上述的条件来控制动画的过度,那何为动画过度(Transition)呢?

这就是简单的动画过度控制,在Animator中能比较方便直观的修改。Transition就是所谓的过度

Settings就能调整过度的时间和衔接。

Conditions就是所谓的过度条件。

注意:如果一个动画有Conditions建议取消Has Exit Time,会出现无法及时触发的问题。

Has Exit Time就是必须过度的时间,处于这个时间时,是不允许任何对动画的操作的。

 

以上都是比较基础的Animator操作,后续会写一些关于IK。Blend Tree。二维混合树。同步动画层。多通道IK。等知识。

posted @ 2016-08-04 00:16  Sooda  阅读(89017)  评论(0编辑  收藏  举报