编辑动画
动画是由关键帧定义的。我们只需在几个关键帧处修改物体身上组件的值,Unity就在其中平滑过渡做成一段动画。
一个物体上的动画能影响哪些值?
所有该物体Inspector里可以改的值(position,color,我们自己写的变量等等)
所有该物体的子物体身上的值
注意:动画不能影响已经有Animator组件的子物体!
在一个物体上同时只能有一个动画播放!
使用Animation编辑器:
-
选到想要的帧处
-
点击录制按钮
-
调节物体组件上的值
动画优先级
动画的优先级是比代码高的!
比如:如果一个物体正在播放控制它的位置的动画,那无论我们在代码里怎么改它的位置都不会生效。
(有不少“bug”是因为这个导致的)
管理动画:Animator
Animator组件是用来管理动画播放的顺序与逻辑的。
每个有动画的物体都有一个AnimatorController(可在Animator组件里查看)
可以在Animator窗口查看、编辑这个AnimatorController
Animator窗口中有几个重要的组成部分:
States、Transitions、Variables、Layers
States–动画状态
每一个State都代表了一个AnimationClip。当Animator运行到一个State时,该State对应的动画就会被播放。
当新建一个动画时,一个同名的State会被自动创建。
查看State信息:Motion、Speed、Transitions
橙色的State是起始State;Animator在游戏开始运行时会直接播放该State的动画。一个动画机有且只有一个起始State。
可以右键选择任意一个State成为起始State。
Transitions–动画过渡箭头
Transition定义了我们在State之间切换/过渡的方式。
连接两个State的白色箭头就是一个Transition。
可以右键选择在任意两个State之间创建Transition。
查看Transition的属性:
Exit Time – 当前clip播放到什么时间开始过渡到下一个clip?
Transition Duration – 过渡的过程要多久?
Interruption Source – 该过渡会被什么样的其他过渡打断?
动画里的变量Variables
动画机里的变量是用于控制Transition的发生的。比如只有当我们按下空格时,才要过渡到跳跃动画。
可以在左侧的面板管理变量。
Animator提供了几种变量类型:float、int、bool、trigger。其中bool和trigger是最常用的。
bool:即布尔值。可以被设定为true或false。
trigger:是一个在一瞬间为true的布尔值。在那之后会即刻失效。
可以在Transition面板下方添加变量条件。当不满足条件时Animator会停在当前State;否则会执行Transition。
常用的动画API
//设定一个bool变量的值
animator.SetBool(string name, bool value)
//激活一个trigger变量
animator.SetTrigger(string name)
//直接跳转到对应的State,无过渡:不需要平滑过渡的情况(比如2D帧动画)
animator.Play(string stateName)
animator.Play(string stateName, int layer, float normalizedTime)