Animation类
animation组件用于播放动画。可以指定动画剪辑到动画组件并从脚本控制动画播放。在Unity的动画系统基于权重并且支持动画融合,叠加动画,动画混合,标签和完全控制动画播放的各个方面。

如果想播放一个简单的动画,可以使用Animation.Play;如果想在动画之间交叉淡入,可以使用Animation.CrossFade;如果想改变动画模式(循环,一次,乒乓),可以改变动画导入设置里面的动画帧的WrapMode,或者在运行时改变AnimationState.wrapMode的值;AnimationState可以用于改变动画的层,修改播放速度,并且直接控制融合与混合。动画也支持枚举,所以你可以像这样在AnimationStates之间循环。

Animator类
Mecanim动画系统中,通过Animator组件来控制动画的播放,设置和获取动画中的参数。

动画播放和取样
在3dsMax或者Maya中创建了一个每秒60帧的动画后,当导入进Unity,同样也是60帧的动画。然而游戏在运行的时候,帧率却不是恒定不变的。在一些速度较快的PC上帧率会更快,帧率也会每一秒在摄像机与给出的任意一点上所看到复杂度不同。基本上这意味着我们可以不用当游戏运行的时候去假设确切的帧率。如果有一个60帧的动画,它应该是可以从不同的帧率上回放回来,比如56.18fps,或者87.61fps,可以是任何的点。
Unity在不同帧率上的的采样动画,并不是它们真正的帧率。但是很幸运,3D电脑图形上的动画不是由分离的帧所组成的,而是连续的曲线。这些曲线对任何点的采样都是很适合的,不是光只是在时间轴上原始帧的那些点。这意味着游戏在运行的时候,在比较高的帧率上,动画效果看起来会更平滑和流畅。
在大多数练习的情况下,事实上Unity采样动画在这些可变的帧率上并不是你想像中还需要去做连接的。然而,如果你有一个在游戏逻辑上要去判断控制动画的坐标属性,那就得注意了。举个例子,如果你有一个30帧的动画是来旋转一个对象从0-180度,你想知道当代码何时进行到当动画进行到一半的时候即90度,不应该去添加一个条件语句来判断现在对象的旋转是不是已经进行到了90度。因为Unity的动画采样是依照游戏不同的帧率来进行的,当旋转在90度以下的时候就该判断了,等到90度的时候就刚好。如果你需要知道何时动画中一个指定点的时候,应该去用AnimationEvent代替。
要注意在可变帧率上的因果关系,一个回放动画要用WrapMode.Once是不可能为一个上一帧的准确时间来采样的。在游戏的动画帧上可以在动画播放后去采样,在下一个帧上的时间上就有多余动画长度,所以就关闭也不会去采样。如果你真的需要上一帧的动画去做采样,就需要WrapMode.ClampForever.这样动画就会正常保持上一帧的采样直到你要停止播放动画。