前言
Unity4.3版本之后添加了新的播放动画组件Animator -> 以树的形式来控制动画的切换
在工程里的模型里选择rig里的AnimationType设置为新动画Humanoid 之后 Apply
此时工程多了个阿凡达Avatar模型
可以在Avatar里配置人物模型骨骼
动画分割
- LoopTime : 循环
- Root Transform Rotation : 动画播放是否对模型的旋转产生影响
- Root Transform Positive(Y) : 是否对y轴位置产生影响
- Root Transform Positive(XZ) : 是否对模型的X Z 轴位置产生影响
打上勾就是不影响
动画控制器 Animator Controller : 动画控制器
在工程右键,找到,之后把这个控制器可以拖入给Aniamtor组件
双击这个控制器
添加动画状态
- 添加动画有两种方式
- 第一种在BaseLayer右键创建新的状态,然后自己在检视面板里改名字,添加手动拖入对应的状态
- 第二种是直接拖入动画到BaseLayer,unity会根据动画自己创建一个。
创建状态转换
点击状态右键->MakeTransition ,此时有条线,把这条连点在要连接的状态上,这两个状态就有联系了。
这时右边有Layers 和 Parameters 两个参数,
第一个Layers是新建一个状态层,
第二个Parameter是设置状态转换的参数使用Parameter来设置他们状态之间的转换。
通过+号来添加
Bool : 用来播放循环动画,条件进入,条件退出
Trigger : 用来播放非循环动画,条件进入,自动退出
int float 的条件为 等于这个值,小于这个值,不等于这个值 3中情况来进入进出
在连线中添加Conditions, 设置属性,此时就可以通过更改参数的值来改变人物的状态
如当IdleToRun值为true时,则进入从普通状态进入奔跑状态用脚本通过按键控制属性的值
using UnityEngine;
using System.Collections;
public class PeopleAnimator : MonoBehaviour {
private Animator _ani;
void Awake(){
_ani = GetComponent<Animator> ();
}
void Update(){
if (Input.GetKey(KeyCode.A)) {
_ani.SetBool ("IdleToRun", true);
}
if (Input.GetKeyUp (KeyCode.A)) {
_ani.SetBool ("IdleToRun", false);
}
if (Input.GetKeyDown (KeyCode.Space)) {
_ani.SetTrigger ("IdleToJump");
}
if (Input.GetKeyDown (KeyCode.Q)) {
_ani.SetTrigger ("IdleToAttack");
}
}
}
- Layers 的使用(了解即可)
- 创建new Layer
- 在New Layer中创建一个默认状态(对应了BaseLayer中的所有状态,所以不需要赋值动画)
- 在New Layer中创建Attack状态
- 设置NewLayer中的IdleToRun(和BaseLayer中的Idle进入Run为同一个条件)
- 在模型中创建一个Avator,设置他的Humanoid ,
- NewLayer中点击齿轮设置Weight值, 传给这个层的Mask新建的Avator。
- 此时就可以实现在原来状态的基础上进入攻击状态(如边跑边攻击)
然而这种边跑边攻击的状态很丑,一般不会使用这种方法来实现,而是在做一个动画。这里只是来说明new Layer的用处,即新建的Layer在上层BaseLayer的状态执行中,继续执行其他状态