小小橘子 发表于 2024-10-11 08:27:07

Timeline实例解析:游戏场景中的动画

本帖最后由 醉酒風 于 2019-4-28 22:41 编辑


Unity 2017.1 推出的Timeline功能,不仅可以高效的帮助大家实现游戏场景中的物体动画,还可以制作出更为复杂的过场动画及电影内容。今天这篇文章将由Unity大中华区技术经理成亮,通过实例分析让大家了解Timeline的多轨道,把各类场景中的元素整合实现更为复杂的动画。

Timeline简介

Timeline 是一套基于时间轴的多轨道动画系统,它支持可视化编辑,实时预览,主要包括Timeline 资源,PlayableDirector,组件以及Timeline编辑器。下图底部展示了Timeline的编辑器,可以看到每一条轨道左边是绑定的场景中的物体,这部分信息会记录在PlayableDirector中;右边就是轨道的播放数据,这部分信息会记录在Timeline资源中。下图中部的红框展示了PlayableDirector组件,它的主要作用是播放Timeline资源,以及保存Timeline所绑定的场景物体。



目前Timeline包括以下六个基本轨道类型:

[*]Animation:用于播放AnimationClip或者关键帧动画


[*]Activation:用于控制物体的激活状态。


[*]Audio:用于音效的播放。


[*]Control:用于控制粒子,或者另一个Timeline对象的播放。


[*]Playable:用于自定义的播放行为。


[*]Cinemachine:用于控制Cinemachien相机系统的播放。


Timeline提供给了用户足够的扩展性,可以通过Playable轨道,自定义任何我们想要的动画行为。比如改变图片Alpha值,或者材质中的某个参数。下面我们将会用实际案例帮助大家了解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类型的轨道,在每一条轨道中控制闪电出现的时机和间隔。




而具体闪电的表现效果由Control Clip对应的子Timeline来负责。如下图所示,闪电效果的Timeline包含四条Control类型的轨道,分别控制不同粒子效果的播放。
   



结语

通过今天的学习,可以让大家初步了解Timeline的多轨道机制,以及资源复用和嵌套使用等特性。可以帮助大家实现很多之前需要代码才能完成的功能。后面我们还将继续为大家分享Timeline强大的扩展性,即自定义行为的Playable轨道。

115451 发表于 2018-10-7 22:39:11

8548498

qq_Judy_et7 发表于 2018-10-9 11:01:39

感谢楼主分享

DAVEFEI 发表于 2018-10-14 14:10:15

{:1_240:}

peet07 发表于 2018-10-14 14:36:32

感谢分享

1326249981 发表于 2018-10-14 14:40:10

感谢楼主分享

779275750 发表于 2018-10-14 15:55:56

1

wuming 发表于 2018-10-14 17:10:24


元素那么大,我想来看看!

全能起始 发表于 2018-10-15 14:19:12

{:1_235:}

yaoyuan1983 发表于 2018-10-15 14:26:12

我们先定一个能达到的小目标,先赚它一亿元素币

发型凌乱 发表于 2018-10-15 22:00:25


元素那么大,我想来看看!

__弓其亮王长 发表于 2018-10-16 10:02:04

收了~感谢分享!

亊鈀菈 发表于 2018-10-16 10:06:09


谢谢楼主分享   

咸菜馒头粥 发表于 2018-10-16 10:25:43

感谢楼主分享,又涨见识了!{:1_235:}

库洛 发表于 2018-10-16 10:29:29

资源哪里好,肯定元素找!

allenkoo 发表于 2018-10-16 11:33:19

这个东西非常的好啊

石头1989 发表于 2018-10-16 11:34:11

666666666666

DAVEFEI 发表于 2018-10-16 14:00:29

{:1_239:}

DAVEFEI 发表于 2018-10-16 14:00:33

{:1_238:}

DAVEFEI 发表于 2018-10-16 14:00:38

{:1_238:}
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: Timeline实例解析:游戏场景中的动画