当前为 5.4 版本,稍后将升级到 5.5。在 5.5 中,本节内容被拆分成了多个小节。

使用动画视图

在 Unity 中,动画视图用于预览和编辑游戏对象的动画剪辑。动画视图可以通过菜单 Window -> Animation 打开。

查看游戏对象上的动画

动画视图和层级视图、场景视图以及检视视图紧密耦合。类似于检视视图,动画视图将显示当前选中对象的动画的时间轴和关键帧。你也可以在层级视图或场景视图中选择一个游戏对象查看。(如果你在项目视图中选择了一个预制体 Prefab,同样可以查看动画时间线,但是只有先拖动预制体 Prefab 到场景视图中,才能编辑动画。)

动画属性列表

The Animation View (left) shows the animation used by the currently selected Game Object, and its child objects if they are also controlled by this animation. The scene view and hierarchy view are shown on the right, demonstrating that the animation view shows the currently selected object.

动画视图(左侧)显示了当前选中的游戏对象所使用的动画,如果它的子对象也使用了动画,那么也会显示在这里。场景视图和层级视图显示在右侧,可以看到当前选中的游戏对象。

动画视图的左侧是动画属性列表。在一个新创建的动画剪辑中,这个列表为空,没有记录任何动画的。当你开始让各种属性动起来时,参与动画的属性将显示在这里。如果动画控制了多个子对象,这个列表还会以层级的方式显示子对象的动画属性。在上面的例子中,机械手臂的各个部分都由同一个动画剪辑驱动,每个被它控制的游戏对象,按照它们在附加了动画组件的根元素中的层级关系显示。

每个属性可以折叠和展开,从而显示每个关键帧记录的精确值。如果在关键帧之间移动磁头(红线),属性右侧的值域将显示补间值。值域可以直接编辑。如果磁头位于某个关键帧上,修改值域将直接修改该关键帧的值。如果磁头在关键帧之间(此时值域显示的是补间值),修改值域将在磁头位置创建一个新的关键帧,值域的值即为该关键帧的值。

An unfolded property in the Animation View, allowing the keyframe value to be typed in directly. In this image, an interpolated value is shown because the playback head (the red line) is between keyframes. Entering a new value at this point would create a new keyframe.

在动画视图中展开属性列表,允许直接键入关键帧的值。在这张图中,因为磁头(红线)位于关键帧之间,所以显示的是补间值。如果在该位置输入一个新值,将创建一个新关键帧。

动画时间轴

动画视图的右侧是每个动画剪辑的时间轴。每个动画属性的关键帧显示在时间轴中。时间轴有两种模式:关键帧清单模式和曲线模式。通过点击动画属性列表底部相应的按钮,可以在两种模式之间切换:

The Dope Sheet / Curves view buttons

关键帧清单模式/曲线模式按钮

这两种模式可以彼此替换,都可以现实动画的时间轴和关键帧数据,但是各有优势。

关键帧清单模式

关键帧清单模式提供更紧凑的视图,允许你在水平轨道上独立地查看每个属性的关键帧序列。可以让你简单地描述多个属性或对象的关键帧时间设置。

Here the Animation Window is in Dope Sheet mode, showing the keyframe positions all the animated properties within the Animation Clip

这里的动画视图是关键帧清单模式,显示了动画剪辑中所有动画属性的关键帧位置。

曲线模式

曲线模式以曲线图的方式显示每个动画属性的值是如何随时间变化的,曲线图可以调整。所有选中的属性叠加显示在同一张图中。这种模式为查看和编辑属性值、补间值,提供了强大的控制。

Here the Animation Window is showing the curves for the rotation data of four selected GameObjects within this animation clip

这里的动画视图显示了动画剪辑中 4 个选中对象的旋转曲线。

当使用曲线模式查看动画剪辑时,非常重要的一点是,每个属性值的范围有时会相差很大。举个例子,假如有一个同时旋转和弹跳的立方体。弹跳的 Y 坐标值可能介于 0 和 2 之间(也就是说,立方体在动画过程中弹跳 2 个单位),但是,旋转值介于 0 和 360 之间。同时查看这两条曲线时,位置动画曲线将非常难以辨别,因为整个视图被放大以显示 0 到 360。

The position and rotation curves of a bouncing spinning cube are both selected, but because the view is zoomed out to fit the 0-360 range of the rotation curve, the bouncing Y position curve is not discernible

同时选择立方体的位置动画和旋转动画,因为视图被放大以显示旋转曲线的 0 到 360,位置曲线的 Y 轴值不可辨识。

你可以点击列表中的单个动画属性,曲线视图会自动缩放,以匹配值范围;或者,你也可以通过拖动右侧和下方的滚动条,来手动缩放曲线视图。

Here the Animation Window is zoomed in to view the bouncing Y position animation. The start of the yellow rotation curve is still visible, but now extends way off the top of the view.

动画视图被放大,以显示位置动画的 Y 轴值。黄色的旋转动画曲线仍然可见,但只显示了一部分。

创建动画剪辑

在 Unity 中,为了让游戏对象动起来,需要附加一个动画组件。这个动画组件必须引用一个动画控制器,动画控制器再引用一个或多个动画剪辑。

在 Unity 中,当开始使用动画视图让游戏对象动起来时,这些元素将被自动创建和绑定。

点击 动画视图 左上角的下拉框,选择 Create New Clip,可以为选中的 游戏对象 创建一个新的 动画剪辑。然后,会提示你把动画剪辑保存到 Assets 文件夹的某个位置。如果这个游戏对象已经附加了动画组件,并且指定了动画控制器,新的动画剪辑将作为一个状态,被添加到现有的动画控制器中。

Create a new Animation Clip

创建一个新的动画剪辑

如果这个游戏对象尚未绑定动画组件,那么将自动进行下面的操作:

  • 一个新的动画控制器资源文件将被创建
  • 新创建的动画剪辑将作为默认状态,被添加到该动画控制器
  • 一个动画组件将被添加到该游戏对象
  • 该动画组件将引用该动画控制器

这样做的好处是,你只需要点击记录按钮或选择 Create New Clip,就可以开始构建动画,动画系统所需的所有元素已经被自动配置好。

下面的图演示了,在动画视图中,创建新的动画剪辑时,这些元素是如何分配的:

A new clip is created, and saved as an asset. The clip is automatically added as the default state to a new Animator Controller which is also saved as an asset. The Animator Controller is assigned to an Animator Component which is added to the GameObject.

一个新的动画剪辑被创建,并保存为一个资源。该动画剪辑作为默认状态,被自动添加到一个新的动画控制器中,该动画控制器也被保存为一个资源。该动画控制器被分配给游戏对象上的动画组件。

在下面的图中,你可以看到一个没有动画的游戏对象。它只是一个简单的立方体,没有附加动画组件。动画视图、检视视图、层级视图和项目视图挨个排列如下。

Before: An un-animated gameobject (Cube) is selected. It does not yet have an Animator Component, and no Animator Controller exists.

之前:一个无动画的游戏对象(立方体)被选中。它没有动画组件,动画控制器也不存在。

通过按下(左侧)动画视图中的记录按钮,或选择动画视图中下拉框的 Create New Clip,就创建了一个新的动画剪辑。Unity 将会询问你该动画剪辑的名字和存储位置。Unity 还会创建一个与选中的游戏对象同名的动画控制器资源文件,并且添加一个动画组件到游戏对象上,并且合适地连接这些资源。

After: After creating a new clip, you can see the new assets created in the project window, and the Animator Component assigned in the Inspector window (far right). You can also see the new clip assigned as the default state in the Animator Window

之后:创建一个新的动画剪辑后,你可以在项目视图中看到新的资源文件,在检视视图(右侧)中看到附加的动画组件。你还可以在动画控制器视图中看到该动画剪辑被当作了默认状态。

让游戏对象动起来

一旦你保存了新动画剪辑,就可以开始为动画剪辑添加关键帧了。开始为选中的游戏对象编辑动画剪辑之前,需要先点击动画记录按钮,进入动画记录模式,此时,对该游戏对象的修改会被记录到动画剪辑。

Record button

记录按钮

任何时候,你都可以通过再次点击动画模式按钮,从而退出动画记录模式。这一操作将把该游戏对象的状态恢复到进入动画记录模式之前。

你对该游戏对象所做的修改将被记录为关键帧,红线所指示的时间即为关键帧的时间。

在动画记录模式中,通过修改游戏对象,你可以为任何属性添加动画。无论是移动、旋转或缩放游戏对象,对应的属性都将被添加到动画剪辑的相应关键帧中。在游戏对象的检视视图中修改值,也会添加关键帧。支持检视视图中的任意属性,例如,数值型、复选框、颜色等大部分属性。

游戏对象的动画属性被罗列在动画视图左侧的属性列表中。不参与动画的属性不会显示在视图中。新增加的动画属性,包括子对象上的属性,同样会被添加到属性列表中。

Tranform 组件的属性有些特别,属性 .x、.y 和 .z 是连接在一起的,所以一次会添加 3 条曲线。

通过点击 Add Curves 按钮,你也可以浏览当前游戏对象(和它的子对象)上所有支持动画的属性。

通过 Add Curves 按钮,你可以选择任意属性,为它添加动画。

Add curves

添加曲线

动画录制模式 中,红色的垂直线表示当前预览的是动画剪辑的哪一桢。检视视图和场景视图将显示游戏对象在该桢的状态。动画属性在该桢的值显示在属性名称的右侧。

在动画录制模式中,红色的垂直线表示当前预览的桢。

Current frame

当前桢

时间轴

在动画剪辑中,你可以点击 时间轴 上的任意一点,来预览或修改该桢。时间轴上的数字是秒数和帧数,所以 1:30 的意思是 1 秒加 30 桢。

Time Line

时间轴

桢导航

你可以使用下面的键盘快捷键在桢之间导航:

  • 按下逗号(,)切换到前一桢。
  • 按下句号(.)切换到下一桢。
  • 同时按下 Alt 和逗号(,)切换到前一个关键帧。
  • 同时按下 Alt 和句号(.)切换到下一个关键帧。

Frame navigation

桢导航

动画模式

在动画模式下,你可以在场景视图中移动、旋转或缩放游戏对象。如果位置、旋转或缩放属性在动画剪辑中不存在的话,这些操作将自动创建动画曲线;并且,自动在当前预览的桢上创建关键帧,以存储改变后的 Transform 值。

你也可以在检视视图中修改游戏对象的任意动画属性。如果需要的话,这些操作也会自动创建动画曲线,并且在当前预览的动画曲线上创建关键帧,以存储改变后的 Transform 值。

创建关键帧

你可以使用 添加关键桢按钮 手动创建一个 关键帧。这个操作将会为 动画视图 中当前选中的所有属性创建一个关键帧。也就是说,你可以有选择性地只为特定属性添加关键帧。

The Add Keyframe Button

添加关键桢按钮

播放

任意时候,在 动画视图 中点击 播放按钮,都可以播放&重放 动画剪辑

The Play button

The Play button
播放按钮

锁定动画视图

你可以锁定动画视图,这样,当你在层级视图或场景视图中切换选中的游戏对象时,动画视图不会自动切换。如果只关注某个特定的游戏对象,那么锁定动画视图会非常有用,此时你可以选择或编辑场景视图中的其他对象。

The Lock button

锁定按钮

更多资料

想要学习控制 曲线模式 的更多内容,请查阅 使用动画曲线 一节。