TimeLine是unity项目内置的工具,使用时不需要主动下载(可能需要更新至最新版本)。
TimeLine是一个全新的可视化工具,而且是一个很好的序列管理工具,可以给不同的对象创建不同类型的轨道,而且在每个轨道当中都可以单独编辑,轨道中的不同资源也可以有序排列融合,作用上可以预先渲染过场动画,适合影视、可交互动画片段的制作。
一、创建TimeLine
TimeLine是Unity内置的工具我们可以直接在Window -> Sequencing -> TimeLine打开TimeLine窗口
接着创建一个空物体,命名为TimeLine作为TimeLine工具的承载体,打开TimeLine窗口后选中创建的物体,点击Create即可创建TimeLine轨道列表
选择指定文件夹创建.palyable文件,成功创建的界面如下:
在进行操作之前注意先将TimeLine窗口锁定,否则选定其它物体的时候它会询问你是否在这个物体上也创建TimeLine工具。
TimeLine窗口的左侧允许我们创建许多不同的轨道,然后在右侧编辑资源片段,点击Add按钮,即可创建不同的轨道
Track Group相当于我们熟知的文件夹,可以对轨道进行分类
二、人物动画的制作
这里我们需要完成NPC角色的动画效果,因此创建Animation轨道(这里可以点击加号创建,也可以直接将所绑定的物体拖至轨道列表创建,拖拽至此系统会自动弹出该游戏物体可以创建的轨道类型)。创建轨道完成并绑定游戏物体后,我们右键单击右侧轨道选择Add From Animation Clip就会弹出你创建好的动画列表
这里创建好之后如下:
我们可以在轨道上创建多个不同的动画片段,可以轻松实现动作的衔接。并且可以观察到,第二条轨道的动画有三角形的重叠区域,这便是TimeLine的强大之处,通过两个动画的重叠可以轻松实现两个动画片段的平滑衔接
三、Cut Scene(镜头切换)的实现
当我们存在多个人物角色,并且想要给他们说话或者做动作时分别给不同的角度的特写时就需要用到Cut Scene。
我们有两种Cut Scene实现方法:
- 创建多个相机,通过切换它们的存在状态实现
- 利用Cinemachine的虚拟相机实现
方法1:创建多个相机
创建多个相机,并调整好它们的位置后,逐个拖拽至轨道列表创建Activation Track。这里创建好之后如下:
(创建相机时注意把新建的相机的Audio Listener取消勾选,并且保证同一时间点只有一个相机起作用。)
Active片段代表相机的作用时间,总体达到的效果如下:
通过这种方法实现有两个缺陷:
1. 每创建一个相机视角就要多创建一个轨道,如果视角过多可能导致TimeLine乱且不易编辑。
3. 该方法实现的镜头切换并不能体现TimeLine的强大功能 – 平滑切换(即使你将两个相机的存在状态重合)
方法二:Cinemachine
Cinemachine使用之前需要在Package Manager中下载。
Cinemachine可以理解为是一个相机管理类工具。
在安装完成之后unity的界面上就会出现Cinemachine窗口栏(如果没有,你也可以在Component中找到Cinemachine),并且在Packages文件夹中会出现Cinemachine。
右键单击Hierarchy界面选择Cinemachine创建普通虚拟相机。创建完成后它会自动在你的主相机上添加Cinemachine Brain组件。将虚拟相机移动到想要的位置(这里建议按下想要移动的虚拟相机上的solo按钮,否则使用Ctrl + Shift + F移动虚拟相机时可能出现所有虚拟相机都移动到同一个位置的BUG),然后创建Cinemachine轨道,该轨道绑定的是带有Cinemachine Brain组件的游戏物体即我们的主相机(安装Cinemachine后出现的新轨道),在将相应的虚拟相机拖拽至轨道上即可创建镜头片段(也可右键单击创建然后在属性面板赋值)。创建完成后TimeLine窗口如下:
可以看到我们以及可以通过TimeLine实现镜头平滑过渡的效果了,总体效果如下:
四、自定义轨道
1、TimeLine轨道的四个组成部分
-
Track / 轨道
[ 继承自TrackAsset ]
-
Clip / 资源、片段
[ 继承自PlayableAsset ]
Clip即轨道上可创建的资源片段。
-
DataBehaviour / 行为
[ 继承自PlayableBehaviour ]
DataBehaviour 为每个资源片段中对应的行为逻辑(可以理解为Clip中的值)
-
Mixer / 混合器
[ 继承自PlayableBehaviour]
Mixer用于处理有交互的、融合叠加的、渐入渐出的相邻片段的相关逻辑
2、创建对话轨道的示例(代码控制TimeLine自定义轨道)
第一步:创建轨道
创建C#脚本DialogueTrack,添加命名空间using UnityEngine.Timeline;
修改脚本继承的基类为TrackAsset。这时候保存脚本我们就可以在TimeLine窗口上创建名为Dialogue Track的轨道了。
如果我们想让该轨道像其它轨道一样可以绑定指定类型的游戏对象,只需要添加特性:[TrackBindingType(typeof(Rigidbody))]
而修改轨道颜色,只需要添加特性:
[TrackColor(1f,1f,1f)]
这里我不需要绑定游戏对象,只将轨道修改为白色。
暂时的代码如下:
第二步:创建Clip资源
我们先创建DialogueBehaviour脚本(因为clip资源需要特定的behaviour才能创建)。
添加命名空间using UnityEngine.Playables;并将继承类修改为PlayableBehaviour
【这里我们只是创建脚本用于clip资源的创建,待会我们会再回到该脚本对它进行修改】
再创建DialogueClip脚本代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;