Unity动画系统控制入门

准备人物

为了方便演示,我们先心剑Unity工程项目,打开Asset Store 资源商店,找到Unity-chan下载之后导入。
在project项目视图中的 UnityChan/Arts/Models/ 中找到Unitychan模型文件 拖到场景里并添加一个plane平面
Unity动画系统控制入门_第1张图片
之后,我们在project视图中创建一个动画控制器,重命名为Anim如图所示
Unity动画系统控制入门_第2张图片
在这里插入图片描述
双击打开动画控制器视图:
Unity动画系统控制入门_第3张图片
在Animation文件夹中找到WAIT00动画文件,直接拖到动画视图中
Unity动画系统控制入门_第4张图片

回到场景中,选择UnityChan模型,运行游戏,可以看到Unitychan正在进行等待动画!
Unity动画系统控制入门_第5张图片
那么我们再次打开控制器,拖入Walk的动画,并且在wait00上面右键->Make Transition,添加一条路径到Walk上面。如图所示
Unity动画系统控制入门_第6张图片
在Paramers列表里面添加一个bool类型的变量,命名为isWalk
Unity动画系统控制入门_第7张图片
然后回到控制器试图,在路径上添加这个判断
Unity动画系统控制入门_第8张图片
同样设置一个返回的路径为false
Unity动画系统控制入门_第9张图片

然后我们在角色身上创建一个脚本,名字叫Anim,用来控制总动画。
Unity动画系统控制入门_第10张图片

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent (typeof (Animator))]
public class Anim : MonoBehaviour {
	private Animator animator;
	// Use this for initialization
	void Awake () {
		animator = GetComponent<Animator> ();
	}
	public void Walk () {
		animator.SetBool("IsWalk", true);
	}
	public void Stop () {
		animator.SetBool("IsWalk", false);
	}

	// Update is called once per frame
	void Update () {
		
	}
}

再给角色添加一个脚本 ,命名为PlayerMove

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMove : MonoBehaviour {

	// Use this for initialization
	private float h;
	private float v;
	private Anim Anims;
	public float Speed = 0.5f;
	void Start () {
		Anims = GetComponent<Anim>();
	}
	
	// Update is called once per frame
	void Update () {
		h = Input.GetAxis("Horizontal");
		v = Input.GetAxis("Vertical");
		OnWalk(h,v);
	}
	
	void OnWalk(float h,float v){
		transform.Translate(h*Speed*Time.deltaTime,0,v*Speed*Time.deltaTime);
		if(Mathf.Abs(h)>0.1||Mathf.Abs(v)>0.1){
			Anims.Walk();
		}
		else{
			Anims.Stop();
		}
	}
}

如此 我们就会得到一个残缺不全的Chan动画:

为了避免这种情况,我们需要把Has exit time 去掉
Unity动画系统控制入门_第11张图片
这样的显示就比较符合常理。

下面我们来尝试制作一下动画混合树blend trees

设置动作混合树

首先在Animator动画试图的空白处点击右键,选择Create—From New Blend 这样就创建出了一个新的混合,重命名为Walk,在Inspector中选为2d
依旧在Parameters标签里面创建两个float类型的参数,重命名为InputH和InputV
Unity动画系统控制入门_第12张图片
在Motion选项里面添加4个Motion Field,创建参数
Unity动画系统控制入门_第13张图片
修改Parameters的参数,一个InputH,一个InputV
在这里插入图片描述
然后把前后左右四个动画添加进去
Unity动画系统控制入门_第14张图片
设置参数
Unity动画系统控制入门_第15张图片
返回layer Base 删除之前的walk动画,制作一个新的transation指向混合树walk并且设置变量
Unity动画系统控制入门_第16张图片
重复上一部,设置新的变量
Unity动画系统控制入门_第17张图片
再设置一个返回变量的路径
Unity动画系统控制入门_第18张图片
返回场景中把之前身上的脚本移除,创建一个新的脚本命名为AniControl:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AniControl : MonoBehaviour {
	public Animator  anim;
	// Use this for initialization
	private float h;
	private float v;

	void Start () {
		anim = GetComponent<Animator>();
	}
	
	// Update is called once per frame
	void Update () {
		h = Input.GetAxis("Horizontal");
		v = Input.GetAxis("Vertical") ;
		Walk(h,v);
	}
	void Walk(float h,float v){
		transform.Translate(h * 0.2f * Time.deltaTime,0,v * 0.5f * Time.deltaTime);
		anim.SetFloat("InputH",h);
		anim.SetFloat("InputV",v);
	}
}

这样就初步完成了动作的混合!
Unity动画系统控制入门_第19张图片

你可能感兴趣的:(动画)