Unity学习记录/ #2 Timeline
//
本专栏为本人对Timeline的学习记录,欢迎大家分享学习经验和指出本文的错误之处。
//
刚玩完量子梦工作室的《超凡双生》,这个工作室一直以来开发的互动电影式游戏让人非常印象深刻,无论是爆火的《底特律:变人》还是拥有着强大推理剧情的《暴雨》都通过着大量的即时动画来展示丰富的剧情。Unity中就有着这样一个强大的工具,让你能在制作游戏时过一把导演瘾,这就是Timeline。
Timeline,就是时间线工具,开发者可以通过使用Timeline在游戏场景中制作动画、镜头移动、视频变化等等。

一、添加Timeline
在我们创建好一个Unity项目以后,打开Window → Package Manager 后可以发现编辑器已经自动为我们安装好了Timeline工具(这真的是一个很常用的工具)。

既然我们的项目中已经有了Timeline,我们就可以开始使用它了。首先让我们打开Timeline编辑窗口,它的位置就在 Window → Sequencing → Timeline。


二、Timeline的组成
打开后,应该可以看到这样的一个窗口。我们现在没有创建任何一个Timeline,所以提示我们 “选择一个 GameObject 以开始创建一个Timeline”。

在Hierarchy窗口中创建一个空物体,取名为Timeline,reset该空物体的Transform(这是一个好习惯),接着我们在Asset窗口中创建一个文件夹,取名为Timeline用来储存我们的Timeline文件。选中我们创建的空物体,可以看到Timeline窗口现在允许我们创建一个Timeline,创建保存在我们的文件夹当中保持项目的整洁。
下图是现在的Timeline窗口,可以看到它包含着一个时间轴和左侧的轨道(现在是空的)。

下拉左侧的添加按钮,可以看到Unity目前可供我们添加的几种轨道,有激活轨道用来控制某物体在时间轴上的激活状态,有动画轨道用来控制某个动画器在时间轴上播放动画的顺序等等,这个项目里添加了 Cinemachine 组件,因此我们发现也可以用影视相机轨道来控制相机,大家大可自己动手尝试一下。

点击我们的空物体,可以看到我们创建Timeline文件后,该物体的身上也自动添加了一个Playable Director 组件,也就是导演椅(这样解释可能比较生动),该物体就作为一个导演一样的存在控制我们剧本的进行。既然是导演,它的手上一定就有一个剧本(Playable 属性中的Timeline 文件),这个剧本我们可以在Timeline窗口中进行编辑,还有剧本的更新方法(目前是随游戏时间更新),Play On Awake 导演一激活演员们就开始按剧本演出,Wrap mode 演出结束时该做什么(现在是什么都不做,Hold 保持在最后一帧,直到播放中断,Loop 循环播放),Initial Time 初始时间 激活后等待几秒开始演出,Bindings 显示绑定。


三、创建一个简单的剧本
让我们来简单动手操作一下,例如制作一个过场动画,我们可能需要播放人物的动画,控制物体的出现或消失,控制音乐,控制摄像头。于是我们就可以先创建相对应的控制轨道。

首先第一个是动画器轨道,当我们将要控制的物体添加进来后,我们有两种方式来设定它的动画,第一种就是从素材里面拖拽动画clip,我想让这个人播放待机的动画,就把对应的Idle动画拖进来设定好时间段。第二种方法就是录制,在动画轨道的部分有个红色的录制按钮,点击按钮之后,我们就进入了录制模式,录制模式下创建的片段是无限的,被叫做无限片段。
以下是官方描述:

在录制模式下,对游戏对象的 可设置动画属性的 任何修改 都会在时间轴上当前的位置设置一个关键帧。
要开始创建动画,请将时间线播放头移动到第一个关键点的位置,然后执行以下操作之一:
1.在Inspector窗口中,在特性名称上单击鼠标右键,然后选择“添加关键点”。这将为特性添加动画关键点,而不更改其值。将在无限片段中显示一个菱形,以显示关键点的位置。
2.在Inspector窗口中,更改GameObject的可设置动画属性的值。这将为属性添加一个动画关键点及其更改的值。一颗钻石图标出现在时间轴中。
3.在场景视图中,移动、旋转或缩放游戏对象。这会自动为更改的特性添加一个键。一颗钻石图标出现在时间轴中。


在录制结束以后,若想对录制的片段进行修改和拖移,需要将无限片段转化为一个动画片段。

也可以在轨道上单击鼠标右键,然后从关联菜单中选择“转换为剪辑轨道”。

此外,动画轨道还提供了两个功能,Aniamtion Override Track 和 Avatar Mask (动画覆盖和化身遮罩),这让我们可以让一个对象同时播放两种动画,并通过遮罩来显示部分的覆盖动画。在动画轨道上单击鼠标右键,然后从关联菜单中选择“添加覆盖轨道”。名为“Override 0”的动画覆盖轨道到选定的动画轨道。请注意,动画覆盖轨迹未绑定到游戏对象,因为覆盖轨道与上面的轨道是同一个对象,覆盖轨道会覆盖掉动画。

让我们点击覆盖轨道来使用化身遮罩,关于化身遮罩就不具体讲述了,大概就是可以遮盖身体部位的遮罩,让只有没被遮住的部位播放动画。

动画轨道介绍了这么多,第二个是激活轨道,该轨道获取到一个物体,我们可以在时间轴上设置该物体激活 Active 的时间段,其余的时间都是禁用的状态。
其次是音频轨道,该轨道获取到一个音源组件(Audio Source),我们可以在时间轴上设定该音源所要播放的音频片段(Audio Clip)和混合。
最后就是摄像机轨道,该轨道获取到一个影视相机大脑(Cinemachine Brain),我们可以在时间轴上设定该相机所获取到的影视相机和切换的混合模式。
当然,Unity官方还给我们提供可自定义的轨道,我们可以通过官方的API写脚本来自定义出属于自己的轨道(具体教程我会将链接放在下面)。
众多不同的轨道所组成的剧本,就是我们所想要的。
另外值得一提的是,因为我们知道剧本只有在被导演使用时才能发挥作用,所以我们可以利用触发来激活我们所想要的剧本。

四、结语
Timeline的简单学习就到这里了,发挥你的想象力动手创建生动的剧本吧!
参考和教程:
1. About Timeline | Timeline | 1.7.1 (unity.cn)(官方文档)
2. https://www.bilibili.com/video/BV1vv411a7YS?share_source=copy_web
(咖喱饭游戏的自定义Timeline教程,很厉害的up主!)