UnityAnimation--调节AnimationCurves
之前简单介绍了在Unity如何创建Aniamtion Clip,这次接着上次的内容学习下Animation编辑窗⼝中两种窗⼝中的另⼀种:Curves(另⼀种是DopeSheet)。
上次学习笔记的传送门:
unity3d animation概念
Dopesheet
上⼀次说到我们可以通过Animation窗⼝创建Animation Clip,其中⽐较重要的步骤就是设置KeyFrame(我习惯把它叫做关键帧)。⽽Anmation窗⼝中的Dopesheet视图主要就是以时间轴的⽅式线性显⽰了KeyFrame的位置,效果⼤概是下图所⽰。
这⾥要补充⼏个关于Dopesheet视图的使⽤技巧:
和Hierarchical窗⼝类似,Dopesheet左侧的属性也是以层次结构显⽰的,这意味着我们可以改变GameObject的⼦对象的属性。
KeyFrame的视图可以通过快捷键F⾃适应从⽽达到最佳的显⽰效果;若想放⼤局部观察,可以使⽤Ctrl + ⿏标左键平移,使⽤Ctrl +⿏标右键缩放。
可以按下⿏标左键选择⼀组Key进⾏操作,当选择完成时,所选Key的左右两侧会⽣成边界指⽰,如下图所⽰:
点击边界区域并拖放即可平移⼀组Key,点击边界并拖放即可⽐例缩放所选Key,具体效果⾃⼰试⼀试就知道了。
Curves
如果想只使⽤Dopesheet实现⽐较好的动画效果还是⽐较困难的,因为它并不能直观地反映参数随时间变化的函数。这时我们可以在Animation窗⼝左下⾓切换到Curves视图, 具体效果如下图
在Curves视图中,所有属性随时间变化的函数都会绘制在同⼀个坐标轴下。所以⼀般我们只需在属性列表中选取希望观察的属性即可。这⾥可以使⽤通⽤的Ctrl+⿏标左键和Shift+⿏标左键的⽅式选取。同样的,想要观察局部,可以在Curves视图使⽤的快捷键基本与Dopesheet中相同(F、Ctrl + ⿏标左
键、Ctrl + ⿏标右键)。
使⽤Curves视图的优点在于我们可以⼿动控制曲线的形状,并且实现的效果更加直观。下⾯将通过创建⼀个旋转弹跳的长⽅体来演⽰Curves视图的使⽤。
⽰例:活跃的⽅块
这是⼀个Unity官⽅⽂档中给出的⽰例,我们接下来将试着模拟它的动画
创建⽅块以及附属动画
在Hierarchy窗⼝中单击右键并选择3D Object - Cube创建⼀个⽅块。打开Animation视图(快捷键为Ct
rl+6),选中新建的⽅块即可看到为Cube创建⼀个新的Animation Clip(若有疑问可参考⽂⾸的链接)。
模拟⽅块的跳动
模拟⽅块的上下跳动我们可以通过改变y轴⽅向上的位移实现,这⾥我们可以有两种处理⽅法,⼀种是匀速的上下跳动,⼀种是更实际的抛物线式轨迹。这⾥就分别⽤Curves视图实现这两种效果。
单击Create按钮创建⼀个Animator和附属的Aniamtion,然后点击Add Property添加⼀个Transform-Position属性。
Transfrom是Unity预定义的⼀种组件(Component),在Scene中的每个物体都会带有⼀个Transform组件,⽤于管理该物体的位置(Position),旋转(Rotation),规模(Scale)。
点击属性列表右下⾓的Curves按钮,我们就可以切换到Curves视图中。不出意外的话,我们可以观察
到⼀条⽔平的直线,这表⽰Cube的位置随时间的函数是⼀个常函数,即不发⽣任何变化。当然我们可以通过添加Key修改函数曲线。
注意:Position实际上包含了三条函数曲线,由于我创建的Cube位于坐标原点,所以三条曲线都是 y=0,如果你的Cube的Position 为(a,b,c),那么你应当看到三条曲线,分别是y=a, y=b, y=c。
通过点击属性视图中Position属性左侧的三⾓标识,可以展开显⽰Position.x, Position.y, Position.z的属性,你也可以选定三个属性中的任意⼀种单独显⽰。这⾥我们只选择Position.y进⾏观察和修改。选中后得到的效果应该如图所⽰, 曲线的颜⾊与Position.y右侧标识符的颜⾊保持⼀致。
为了模拟上下跳动的效果,我们可以在动画所有采样点的中点处设置⼀个Key,表⽰弹跳的最⾼点。先在0:30处⿏标右键Add key添加⼀个关键点,然后⿏标左键按住并沿Y轴拖拽来改变该点的Position.y的值。
⼩窍门:
- 拖拽改变Key的位置时我们经常会遇到对不齐理想位置的情况,这时可以在拖拽时按下Ctrl键来实现离散式拖拽,即只会拖拽到⽹格点上。
- 如果你在缩放后曲线变得不好观察了,完全可以使⽤A(All)来回到全局最佳观察视图。
这⾥我选择Position.y的值为1,你也可以选择其他的值。改变过后的视图应该是下⾯这样:
你可能会好奇为什么只指定⼏个关键点就可以⽣成这么优雅的曲线,其实这⾥⽤到了计算机图形学中⽐较重要的⼀种曲线:B样条曲线(B-spline), 这种曲线的绘制只需要指定⼀个点集就可以⽣成⼀条贯穿它们所有点的曲线。感兴趣的可以参考Dr. C.-K. Shene的
做到这⼀步其实我们已经得到了⼀个类抛物线式的曲线了,当然我们也可以在最⾼点和最低点设置⼀个滞留时间,让动画更加Interesting。我修改后的曲线就像下⾯这样:
接下来,我们创建另⼀个Cube来演⽰匀速运动如何实现。
我们可以直接像上述步骤⼀样先得到⼀个平滑曲线,然后在三个Key值点通过⿏标右键选择它们的切线类型。在Curves中预定义了五种不同的Key点切线类型,它们分别是:
- Clamped Auto: Unity5之后使⽤的默认切线类型,可以根据给定的Key⽣成平滑曲线
- Auto: Unity5之前使⽤的默认切线类型,保留⽤于兼容之前的版本,不建议使⽤
- Free Smooth:可以⼿动调节Key点切线斜率,但为了保证切点左右两侧曲线平滑衔接,左右两侧切线固定共线
- Flat:斜率为0的切线,可以看做Free Smooth的特殊版本
- Broken: 左右两侧切线不共线,⽣成的曲线⼤多不平滑,但变化性更加丰富。设置为Broken的Key点可以单独设置左右两侧切线的类型,其中就包含了我们要⽤到的Linear。
注意: 当改变了Key点左右两侧的Tangents类型,Key点的类型会⾃动更改为Broken。
为了实现匀速直线运动,我们只需把每个Key点设置为Both Tangents - Linear,这样就可以得到分段的斜率固定的两条曲线。
模拟⽅块的弹性
如果我们想给Cube加上⼀点弹性,可以让它在最低点和最⾼点时有⼀点压缩,在上升和下降的过程中因为惯性有⼀点拉伸,同样是只针对y ⽅向上的值⽽⾔。
这⾥给出我实现的曲线供参考,你可以试着⾃⼰做做看。
模拟⽅块的旋转

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。