你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周的学习总结报告哦。
在Timeline中,Animation Track可能是我们用的最多的一个轨道了,而且功能也相对比较多,今天小新就来总结一下Animation Track经常用到的那些功能。
在Timeline中录制基本动画
你可以直接在Timeline的Animation轨道上录制动画,这样直接录制出来的动画称为无限片段(Infinite Clip)。
为什么叫无限片段呢?无限片段贯穿整个Timeline,包含了关键帧动画。无限片段不能改变位置、修改长度或者分割,因为它的长度是无限的,贯穿整个轨道。
录制动画之前,你需要有一个空白的Animation track。当然了,创建Timeline的时候已经自动创建了一个选中物体的Animation track。你也可以点击上面的加号,创建一个新的空白Animation track。
在轨道列表中,点击红色的圆形录制按钮开启录制模式。
在录制模式中,clip区域会显示红色,并且上面有”Recording…“的信息,录制按钮也会闪烁。
录制时候的操作和之前学过的Animation窗口录制动画就很像了。录制模式下对任何属性(动画支持的属性)的修改都会作为关键帧被记录在当前时间位置。
一般的流程如下:
- 首先将Timeline的时间轴移到第一帧
- 在Inspector窗口中,在需要动画的属性上面右键,选择 Add Key 。这会添加一个动画关键帧。在Clip上会显示一个菱形的小图标,代表关键帧的位置。
- 移动时间轴,修改GameObject的属性,Timeline会自动在clip中添加一个关键帧,保存修改后的属性。
- 同样可以在场景中进行操作,对物体的移动、旋转、缩放都会记录成关键帧。
录制完成后,再次点击录制按钮,就可以结束录制,退出录制模式。
录制完成后,就没办法直接在Timeline中修改无限clip了,如果需要修改,可以双击clip区域打开动画编辑器窗口。也可以展开曲线编辑区域进行编辑。
最后保存场景或者工程,会将录制的动画保存到Timeline资产中。
如果再增加录制动画,每个动画片段都会按顺序命名。比如三个动画片段会命名成 “Recorded”, “Recorded (1)”,“Recorded (2)” 。如果你把Timeline资产删除了,里面录制的动画片段也会随之删除。
将无限片段转换成动画片段
无限片段在Timeline窗口中显示成一个个关键帧。无限片段不能移动、修改长度、分割,因为它没有一个具体的时长。如果你想移动它,有一个办法,就是将无限片段转换成动画片段(Animation Clip)。不过需要注意的是,一旦转换成动画片段(Animation Clip),就不能再转回去了。
转换的方法很简单:在Clip上右键,选择Convert To Clip Track
。
转换过后,就会显示成一个动画片段。
处理人形动画
下面虽然主要说的是人形动画,但是介绍的方法适用于所有动画。主要讨论的问题包括:
- 如何匹配动画之间的偏移
- 手动调整偏移
- 创建动画混合解决跳动和滑步的问题。
在接着阅读下面内容之前,你可以去mixamo.com上下载一些人物的动画作为素材。
首先你需要在角色物体上创建Timeline实例,创建后如下图所示:
从工程中拖一个动画clip到Animation track上。例如你可以拖一个Idle的动画,让角色从待机状态开始。
如果想要在Clip视图里面移动、缩放、修改动画长度,在添加Track的按钮右边选中Mix Mode,如下图:
Clip的编辑模式一共有三种,之前讲到过。Mix Mode下,你可以拖拽、修改动画长度来创建混合。
下面再添加一个动画Clip到Animation Track上,比如向左跑的动画( 名字是Run_Left ),拖拽clip的尾部来修改Clip的长度,保证能播放完一个循环。
如果现在点击播放按钮播放的话,你会发现在第一个动画和第二个动画之间会发生跳动,这是为啥呢?这是因为第一个动画结尾的位置和第二个动画开始的位置不匹配,那怎么办呢?
如下图所示,29帧和30帧之间会发生跳动。
修复动画片段之间的位置偏移
想要修复跳动的问题,就得将不同动画片段的偏移匹配上。Timeline系统提供了多种匹配偏移的方式。现在我们先将第二段动画匹配到第一段动画的位置上。在第二段动画(Run_Left)上右键,弹出菜单中选择 Match Offsets to Previous Clip 。
现在播放Timeline的话,虽然位置和旋转匹配上了,但是两个动画之间仍然有跳动,因为两个动画的姿势不太一样。第一个动画结尾,角色的两只脚站在一起,而第二个动画中角色的脚是开始跑的姿势。
混合片段
要解决上面遗留的问题,需要在两段动画之间创建混合,有点类似之前Animator中不同状态的混合。通过移动、调整动画长度来调整两个动画片段的混合区域。比如下图中,Idle动画延长到了36帧,Run_Left动画开始帧移动到了25帧,动画的其他属性都没修改。
混合可以移除两个动画切换时明显的跳动。大多数动画之前的混合都有较好的效果,但是有些情况下,脚步可能会出现滑步的情况。
减少滑步
为了减少滑步的情况,我们可以手动调整动画的偏移,这样可以让脚步变化的不那么明显。手动调整的方法是:在Timeline窗口中选中动画clip,在Inspector窗口中展开 Animation Playable Asset 区域。
上图中 Clip Transform Offsets 不是0的原因是因为之前点击Match Offsets to Previous Clip
时系统自动匹配了前一个动画的偏移,但是这个偏移是基于骨骼的轴心来计算的,所以脚的位置可能会有问题。
在 Clip Transform Offsets 下,启用Move工具,Scene窗口中会在模型轴心显示移动的小工具。
有两种方法可以手动调整偏移:
- 在Scene窗口中拖拽
- 在Inspector中修改数值
可能需要多次的修改调试才能达到一个比较好的效果。
使用Animation Override和Avatar遮罩
在动画系统中我们学习过了Animator Override和Avatar Mask,那在Timeline中同样有类似的功能。比如你想让人物能一边跑一边开枪,你就需要用到Mask的功能了。
首先你需要在角色物体上创建Timeline实例,上面有一个简单的Animation clip,创建后如下图所示:
如上图,放了一个向前跑的动画。在轨道上右键,弹出菜单选择 Add Override Track 。这样就会添加一个Override轨道,默认名字是Override 0,并且是和原来的动画轨道是关联的:你会看到,新创建的Override轨道并没有绑定一个GameObject,而是和原来的动画轨道关联同一个GameObject。
现在,你可以从工程中拖一个上半身的动作到Override轨道上,比如一个胳膊挥动,但是下半身站立不动的动画。将Override Clip调整到和上面Clip相同的位置和长度。
如果现在播放Timeline的话,你会看到挥手的动画完全覆盖了跑步的动画。这是因为我们没并没有设置覆盖哪部分,所以会全部覆盖掉。如果想让两个动画结合,需要使用Avatar Mask功能。选中Override clip,在Inspector中启用Apply Avatar Mask功能。
在Project中创建一个Avatar Mask,遮住下半身,然后将这个Avatar mask拖到对应的属性里面。
如上图这个Avatar Mask,它允许上半身的动画执行,绿色代表会生效,红色的部分会被屏蔽掉。
设置了Avatar mask的轨道,会显示一个小图标,如下图所示:
现在再运行,你就能看到挥手的上半身的动画覆盖掉了向前跑的上半身动画。如果你想暂时禁用Avatar Mask,可以点击上图中那个小图标。
总结
Timeline中大部分内容的呈现还是需要通过动画来完成的,本节课学习了很多动画相关的技巧,记得多尝试。
洪流学堂公众号回复timeline
获取专题教程。