Unity3D之Mecanim动画系统学习笔记(五):Animator Controller

时间:2015-09-22 18:31:41   收藏:0   阅读:1814

简介

Animator Controller在Unity中是作为一种单独的配置文件存在的文件类型,其后缀为controller,Animator Controller包含了以下几种功能:

下面我们通过一个图来直观的看看动画的组成结构:

技术分享

Animator组件用来控制人物动画的播放,其中需要的两个最核心的内容就是控制动画播放逻辑的Animator Controller以及动画骨骼Avatar对象。

Animator组件

我们需要播放动画的角色都需要添加Animator组件,该组件即为我们控制动画的接口,下面我们来看看Animator组件:

技术分享

下方还会显示我们的动画的一些主要信息。

Animator Override Controller

我们在右键创建资源时还会发现这样的一个资源,该资源的意思是基于某个Animator Controller进行每个状态的动画的修改,其他设置不变,可以方便的复用我们已经创建好的Animator Controller。

创建一个Animator Controller

我们在Project视图中右击菜单中可以创建Animator Controller,下面我们看看新创建的Animator Controller:

技术分享

首先,我们发现的是3个默认的状态,这些状态是Unity自动帮我们创建的同时也无法删除:

创建新状态

1.我们可以通过右键菜单进行创建:

技术分享

2.或者我们可以通过把一个Animation Clip拖拽到状态机窗口中进行创建;

我们发现我们创建的第一个状态被设置为默认的第一个状态,第一个状态会被标记为黄色,如下:

技术分享

我们可以通过Inspector窗口进行该状态的设置,上篇笔记有详细的解说。

我们可以使用这两种方法来创建多个状态,同时配置好每个状态,如下:

技术分享

状态切换

我们的状态机已经有了状态,但是还没有指定每个状态之间的关系,下面我们来看看该如何指定状态之间的关系。

在Mecanim中,动画之间的播放不再是通过调用诸如“Play”之类的方法进行切换了,而是通过判断参数的变换来进行状态即动画的切换。

我们打开Parameters面板,这里被用来设置状态机使用到的各种参数,如下:

技术分享

点击加号可以创建一个参数,在Unity中允许我们创建4种类型的参数:

Float:float类型的参数,多用于控制状态机内部的浮点型参数;

Int:int类型的参数,多用于控制状态机内部的整型参数;

Bool:bool类型参数,多用于状态切换;

Trigger:本质上也是一个bool类型的参数,但是其值默认为false,且设置为true后系统会自动将其还原为false;

下面我们创建两个简单的Bool类型的变量,如下:

技术分享

我们希望,当Walk为true时人物走动,为false时人物站立,Run也是一致,只不过会过渡到跑动。

下面我们通过右击状态的菜单可以拉出一条状态转换的线条,表示当前状态转换到目标状态。

技术分享

我们点击线条可以在Inspector窗口设定转换的条件,如下:

技术分享

我们在条件框设置Walk为true,表示当Walk被设置为true时就从站立跳转到走路动画,同样的,走路回到站立也需要一条转换的线条,不过Walk要设置为false:

技术分享

Run的设定也一致。

控制动画转换

我们在绑定了Animator组件的GameObject之上添加下面的新脚本组件,就可以实现通过按键来切换人物播放的动画了:

 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class TestAnimChange : MonoBehaviour
 5 {
 6     private Animator _animator;
 7 
 8     void Start()
 9     {
10         _animator = this.GetComponent<Animator>();
11     }
12     
13     void Update()
14     {
15         if(Input.GetKeyDown(KeyCode.W))
16         {
17             _animator.SetBool("Walk", true);
18         }
19         if(Input.GetKeyUp(KeyCode.W))
20         {
21             _animator.SetBool("Walk", false);
22         }
23         if(Input.GetKeyDown(KeyCode.R))
24         {
25             _animator.SetBool("Run", true);
26         }
27         if(Input.GetKeyUp(KeyCode.R))
28         {
29             _animator.SetBool("Run", false);
30         }
31     }
32 }

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!