1、Animation窗口
Window——>Animation——>Animation
Animation窗口 直译就是动画窗口,它主要用于在Unity内部创建和修改动画,所有在场景中的对象都可以通过Animation窗口为其制作动画
原理:
制作动画时:记录在固定时间点对象挂载的脚本的变量变化
播放动画时:将制作动画时记录的数据在固定时间点进行改变,产生动画效果
2、相关概念
- 动画时间轴:
每一个动画文件都有自己的一个生命周期,从动画开始到结束,我们可以在动画时间轴上编辑每一个动画生命周期中变化
- 动画中的帧:
假设某个动画的帧率为60帧每秒,意味着该动画1秒钟最多会有60次改变机会,每一帧的间隔时间是 1s / 60 ≈ 16.67毫秒,也就是说 我们最快可以每16.67毫秒改变一次对象状态
- 关键帧:
动画在时间轴上的某一个时间节点上处于的状态
3、Animation窗口功能
4、创建动画
- 在场景中选中想要创建动画的对象
- 在Animation窗口中点击创建
- 选择动画文件将要保存到的位置
保存动画文件时,Unity会帮助我们完成以下操作
- 创建一个 Animator Controller(动画控制器或称之为动画状态机) 资源(新动画系统)
- 将新创建的动画文件添加到Animator Controller中
- 为动画对象添加Animator组件
- 为Animator组件关联创建的Animator Controller文件
5、相关操作(包括参数、关键帧模式下编辑动画、曲线模式编辑动画)
6、Animation和Animator(这里本文主要讲Animation)
Unity中有两套动画系统
新:Mecanim动画系统——主要用Animator组件控制动画
老:Animation动画系统——主要用Animation组件控制动画(Unity4之前的版本可能会用到)
目前我们为对象在Animation窗口创建的动画都会被Animator动画系统支配
有特殊需求或者针对一些简易动画,才会使用Animation动画系统
注意:
在创建动画之前为对象添加Animation组件之后再制作动画,这时制作出的动画和之前的动画格式是有区别的
7、代码控制播放
//1.播放动画
if(Input.GetKeyDown(KeyCode.Alpha1))
{
animation.Play("1");
}
if (Input.GetKeyDown(KeyCode.Alpha2))
{
animation.Play("2");
}
//2.淡入播放,自动产生过渡效果
if(Input.GetKeyDown(KeyCode.Alpha3))
{
//当你要播放的动画的开始状态 和当前的状态 不一样时
//就会产生过渡效果
animation.CrossFade("3");
//animation.Play("3");
}
//3.前一个播完再播放下一个
if( Input.GetKeyDown(KeyCode.Alpha4) )
{
//animation.PlayQueued("2");
animation.CrossFadeQueued("2");
}
//4.停止播放所有动画
//animation.Stop();
//5.是否在播放某个动画
if( animation.IsPlaying("1") )
{
}
//6.播放模式设置
animation.wrapMode = WrapMode.Loop;
//7.其它(了解即可,新动画系统中会详细讲解)
//层级和权重以及混合(老动画系统需要通过代码来达到动画的遮罩、融合等效果)
//设置层级
animation["1"].layer = 1;
//设置权重,不同层级的动画播放时,weight=1的动画会覆盖层级低的动画
animation["1"].weight = 1;
//混合模式 叠加还是混合
animation["1"].blendMode = AnimationBlendMode.Additive;
//设置混组相关骨骼信息
animation[""].AddMixingTransform();