Timeline实例解析:游戏场景中的动画
Unity 2017.1 推出的Timeline功能让Unity在动画制作上又迈上一个新的台阶。它不仅可以高效的帮助你实现游戏场景中的物体动画,还可以用于更为复杂的过场动画以及电影内容的创作。今天这篇文章将由Unity大中华区技术经理成亮,通过实例分析的方式让大家了解如何使用Timeline制作游戏场景中的动画。
Timeline简介
Timeline 是一套基于时间轴的多轨道动画系统,它支持可视化编辑,实时预览,主要包括Timeline 资源,PlayableDirector组件以及Timeline编辑器。下图底部展示了Timeline的编辑器,可以看到每一条轨道左边是绑定的场景中的物体,这部分信息会记录在PlayableDirector中;右边就是轨道的播放数据,这部分信息会记录在Timeline资源中。下图中部的红框展示了PlayableDirector组件,它的主要作用是播放Timeline资源,以及保存Timeline所绑定的场景物体。
目前Timeline包括以下六个基本轨道类型:
Animation:用于播放AnimationClip或者关键帧动画。
Activation:用于控制物体的激活状态。
Audio:用于音效的播放。
Control:用于控制粒子,或者另一个Timeline对象的播放。
Playable:用于自定义的播放行为。
Cinemachine:用于控制Cinemachien相机系统的播放。
值得一提的是通过Playable轨道,我们可以自定义任何我们想要的动画行为,比如改变图片Alpha值,或者材质中的某个参数。所以说Timeline提供给了用户足够的扩展性。下面我们就会用实际的例子来帮助大家了解Timeline基本使用方法以及一些特性的应用。
Timeline基本使用方法
上图中角色从咖啡机取咖啡的动画就是使用Timeline完成的。它使用了Animation,Activation,Audio以及Control四种基本轨道类型,上图中Timeline的轨道如下图所示:
Animation 轨道
这是最常用的轨道类型,角色和咖啡机都使用了Animation轨道。首先我们看到角色的Animation轨道除了一段human_idle_01的Animation Clip,还包含了一段子轨道Action Track。这段子轨道比较特别,我们称之为覆盖轨道(Override Track),它的作用是在这个时间段内优先播放子轨道的内容,也就是角色取咖啡这一段动画。再来看一下咖啡机的轨道,轨道上包含了一系列Animation Clip,它们会按照先后顺序进行播放。另外,Animation轨道还支持关键帧动画的编辑并导出到Animation Clip,具体使用可以参考官方手册。
Activation轨道
咖啡杯(CoffeeCup)对象的出现和隐藏使用了Activation轨道。这个轨道的功能很简单,就是控制对象的激活状态。这个功能确实非常的实用。
Audio轨道
Audio轨道的使用也很简单,将声音素材直接拖入轨道即可。下图展示了AudioClip的属性,可以看到每一段Clip都有对应的音效素材。
Control轨道
本例中Control轨道用于控制咖啡流出的粒子效果的播放。用Control轨道来播放粒子效果,可以预览每一帧的粒子效果,这个功能对粒子效果的调试非常的有帮助。当然Control轨道还有更多的控制功能,比如它还可以控制子Timeline的播放。
在Timeline中我们可以通过多轨道很方便的控制场景中不同物体的动画,同时轨道覆盖以及粒子效果预览等功能也为动画制作提供了很好的帮助。
复用Timeline
可以被复用是Timeline一个很重要的特性。只要是有相同的动画行为,即使是不同的物体,也可以复用相同的Timeline资源。比如说游戏中常见的收集物品,通常都有相同的一些动画表现效果,如果每一类物品都要单独制作动画,显然从制作和性能上都是低效的。下面我们就以收集物动画的例子来分析Timeline 是如何被复用的。
下图中所示的红心、五角星、磁铁、翻倍四个收集物的动画行为完全一致,因此它们的收集动画统一使用了PickedUp-CollectableTimeline这个Timeline资源。在Timeline窗口中第一个轨道是收集者的动画,由于在预制件中是无法知道场景中的收集者的,所以需要动态绑定收集者,因此暂时留空;第二个轨道是缩放和旋转收集物的动画,直接绑定到目标对象上即可;第三,四条轨道通过Control轨道播放相同的粒子效果。
下面我们看一下如何动态绑定轨道的目标对象,如下面这段代码所示,collectedTimeline就是Timeline资源所对应的PlayableDirector,首先通过遍历的方式找到相应的轨道playableAssetOutput,然后调用PlayableDirector的SetGenericBinding把收集者动态绑定到轨道上。
从上述例子可以看到,Timeline通过把动画数据和动画目标分离,实现了资源复用的特性,可以大大提升使用效率。
Timeline嵌套
有时候在场景中常常会出现这种情况,一个物体会在某一处按照一定间隔出现,比如天空中的闪电。闪电本身是一个动画序列,而控制闪电的间隔本身也可以看作是一段动画。而这样的双层动画也可以通过Timeline来实现,因为Timeline支持嵌套。
我们首先来看主Timeline的轨道,这里有六条控制闪电的轨道,都是Control类型的轨道,在每一条轨道中控制闪电出现的时机和间隔。
结语
通过今天的学习,可以让大家初步了解Timeline的多轨道机制,以及资源复用和嵌套使用等特性。这些功能可以帮助大家实现很多之前需要代码才能完成的工作。后面我们还将继续为大家分享Timeline强大的扩展性,即自定义行为的Playable轨道。以及如何结合Cinemachine智能相机系统去创造的丰富表现力等内容在Unity官方中文社区(unitychina.cn),请保持关注!
推荐阅读
Unity高手在民间:Timeline与Cinemachine社区作品赏析
近期Unity官方活动
9月,Unity面向莘莘学子特别推出Unity Plus加强版开学季专属特惠,及Asset Store资源商店5折促销。
点击“阅读原文”进入Unity官方中文社区!