前言

  在Unity中,我们可以使用Animation Editor来创建和编辑动画。在Animation Editor中,我们可以通过调整Keyframe(关键帧)的位置以及关键帧之间的Animation Curve来调整一个动画。本篇文章将要介绍的,就是Animation Editor两种编辑动画的模式,分别是Dopesheet ModeCurves Mode


Dopesheet Mode

  Anmation Editor中的Dopesheet Mode以时间轴的方式线性显示了关键帧的位置,我们可以在上面很方便地添加、删除和移动关键帧。

Dopesheet Mode
Dopesheet Mode

  在Dopesheet模式下,我们可以使用鼠标左键选中一个关键帧来移动它的位置,也可以通过鼠标左键同时选中多个关键帧进行编辑。

选中多个关键帧
选中多个关键帧

  当我们选中多个关键帧之后,在这些关键帧的两侧会生成边界提示,此时我们可以通过左右移动边界来同时移动选中的所有关键帧,也可以通过左右拉伸边界来缩放关键帧之间的时间间隔。

编辑选中的多个关键帧
编辑选中的多个关键帧

  需要注意的是,如果只想通过使用Dopesheet模式来实现比较好的动画效果还是比较困难的,因为它无法直观地表达并编辑关键帧之间的Animation Curve。为了实现更好、更复杂的动画效果,我们还需要使用Anmation Editor中的Curve模式来编辑关键帧之间的Animation Curve


Curves Mode

  在Curves Mode中,所有由动画控制的属性对应的Animation Curve都会被绘制在同一个坐标轴下,我们可以很方便地对这些Animation Curve进行编辑。此外,为了便于观察和编辑,我们可以使用通用的Ctrl+鼠标左键Shift+鼠标左键的方式在左侧的属性列表中选取希望观察的属性,以减少被绘制的Animation Curve的数量。

Dopesheet视图
Dopesheet视图


编辑Animation Curve

  那我们该如何编辑Curves Mode中绘制的Animation Curve呢?我们知道,通常我们在编辑一条曲线时,我们可以通过给这条添加锚点,并改变这个锚点的位置以及切线的斜率来得到我们想要的曲线。Unity也采用了这种方式来编辑Animation Curve

  在Curves Mode中,我们可以通过双击鼠标或者使用菜单在Animation Curve上添加Key,而Key就是能用来编辑两个关键帧之间的Animation Curve锚点。在Animation Editor下编辑Animation Curve时,Keyframe也会被当做Key

  除了Animation Curve两端的Key只有一条切线,其余的Key往往存在两条切线(Tangents),一条是左边曲线在该点的切线,一条则是右边曲线在该点的曲线。那我们在编辑某个Key的切线斜率时,我们该编辑这个Key的哪条切线?

  在Unity中,我们可以通过鼠标右击Key来选择该KeyTangent Type(切线类型),从而来决定在该Key上我们可以编辑的切线。

Unity提供的Tangent Type如下:

  • Clamped Auto: 这个是默认的切线类型。如果一个Key被设置为Clamped Auto,那么会根据给定的Key动态地生成一段平滑的曲线,确保曲线不会超过(overshoot)目标值。
  • Auto: Unity5之前使用的传统切线类型,和Clamped Auto相比,当Key的位置被改变时,它不会动态地更新切线;此外,它也无法保证生成的曲线不会超过(overshoot)目标值。之所以在Unity5之后还被保留,是为了兼容之前的版本,不建议使用。
  • Free Smooth: 可以自由地编辑切线的方向,当我们在编辑切线类型为Clamped AutoKey的切线方向时,该Key的切线类型会被自动转换为Free Smooth
  • Flat: 强制设置Key的切线方向为水平方向。
  • Broken: 当Key的切线类型为Broken时,我们可以分开单独设置左右切线的类型
    • Free: 可以自由地编辑切线方向
      Broken-Free
    • Linear: 切线方向会被自动设置为确保该Key到目标点之间的曲线为直线
      Broken-Linear
    • Constant:该点之前一直是上个点的值,到该点之时瞬间变为该点的值
      Broken-Constant

后言

  在Unity中,Animation Curve作为一种变量类型,除了可以用于动画的控制,还可以用在Particle SystemAudio Source等组件中,甚至还能作为某个脚本的输入参数,用于拟合数据。尽管在其他用途中Animation Curve的编辑窗口跟Animation Editor提供的编辑窗口会所有不同,但编辑的方式是基本相同。