接触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。等知识。