文章目录

  • 一、关于Timeline
  • 二、安装Timeline
  • 三、如何创建一个Timeline资源
    • 1、方法一(该方法需手动添加Playable Director组件)
    • 2、方法二(该方法会自动添加Playable Director组件)
  • 三、创建轨道
  • 四、具体轨道的使用
    • 1、Activation Track轨道
    • 2、Animation Track轨道
      • 2.1、用法一:直接使用Animation Track来录制动画
      • 2.2、用法二:播放已制作好的Animation Clip
    • 3、Audio Track轨道
      • 3.1、 导入音效资源
      • 3.2、将音效资源拖入到轨道中
      • 3.3、可在轨道上对音效做简单的编辑
    • 4、Control Track轨道
      • 4.1 控制粒子特效
      • 4.2 嵌套Timeline
    • 5、Signal Track轨道
      • 5.1、 响应信号的物体和脚本
      • 5.2、创建Signal Track轨道,设置响应物体
      • 5.3、创建信号发射器Signal Emitter
      • 5.4、给信号发射器设置响应函数
      • 5.5、运行效果
    • 6、Playable Track轨道
      • 6.1、PlayableAsset和PlayableBehaviour脚本
      • 6.2、将PlayableAsset拖到轨道上
      • 6.3、动态设置PlayableAsset参数
      • 6.4、运行效果
  • 五、答疑
    • 1、Timeline如何实现倒放
    • 待续

一、关于Timeline

Timeline是一套基于时间轴的多轨道动画系统,它支持可视化编辑,实时预览。
这一个技术相对于其他动画系统,最大的区别就是,Timeline可以针对多个游戏物体做出的一系列动画,主要用于过场动画的制作,实现电影级的那种分镜效果。

二、安装Timeline

打开Package Manager,安装TimeLine,Unity2020默认是安装了TimeLine的,可以通过Package Manager进行更新。

三、如何创建一个Timeline资源

1、方法一(该方法需手动添加Playable Director组件)

Project视图中,右键菜单 - Create - Timeline

即可创建Timeline资源(格式为.playable

但这种方式创建的Timeline资源是没有被引用的,需要通过Playable Director组件来引用这个Timeline资源,从而播放它。
我们可以给某个物体手动添加Playable Director组件,然后引用Timeline资源。

2、方法二(该方法会自动添加Playable Director组件)

点击Unity菜单Window - Sequencing - Timeline

此时会打开Timeline窗口,并提示你选择一个物体:To start creating a timeline, select a GameObject

当我们选中Hierachy视图中的某个物体后,Timeline窗口中会出现一个Create按钮

点击Create按钮即可创建Timeline资源(格式为.playable

我们还会发现,我们选中的物体,自动挂了Playable Director组件,并自动引用了Timeline资源

三、创建轨道

Timeline窗口左侧栏右键菜单,可以创建多种轨道

轨道 描述
Track Group 将不同的轨道进行分类,相当于文件夹功能
Activation Track 控制物体的显示和隐藏
Animation Track 为物体加入动画,可以在场景中方便地录制动画,也可以是已经制作好的Animation Clip
Audio Track 为动画添加音效,并可对音效进行简单的裁剪和操作
Control Track 在该轨道上可以添加粒子效果,同时也可以添加子Timeline进行嵌套
Signal Track 信号轨道,可以发送信号,触发响应信号的函数调用
Playable Track 在该轨道中用户可以添加自定义的播放功能

四、具体轨道的使用

1、Activation Track轨道

这个轨道是控制物体的显示和隐藏的,使用很简单,创建Activation Track轨道后,把需要控制的物体拖到物体槽中,比如下面是控制一个正方体(Cube)的显示与隐藏,效果如下。

2、Animation Track轨道

Animation Track轨道可以为物体加入动画,可以在场景中方便地录制动画,也可以是已经制作好的Animation Clip

2.1、用法一:直接使用Animation Track来录制动画

将物体拖动到Animation Track的物体槽中时,如果物体没有Animator组件,会提示为物体挂一个Animator组件。
比如这里,我们要给一个Cube录制动画,点击Create Animator on Cube

接着,点击录制按钮,即可开始录制动画

我们做一个简单的位移动画录制

我们还可以在轨道上右键菜单 - Edit in Animation Window,打开Animation窗口来编辑动画

2.2、用法二:播放已制作好的Animation Clip

首先,我们给Cube创建一个Animation动画

Cube拖到Animation Track的物体槽中

然后在轨道上右键菜单 - Add From Animation Clip,选择我们上面制作好的Animation动画

即可使用Animation Track轨道来播放Animation Clip

3、Audio Track轨道

Audio Track为动画添加音效,并可对音效进行简单的裁剪和操作。

3.1、 导入音效资源

首先,在工程中导入一个test.ogg音效资源

3.2、将音效资源拖入到轨道中

Timeline中创建Audio Track轨道,然后再轨道上右键菜单 - Add From Audio Clip

选择我们上面导入的test.ogg资源

即可在轨道上看到资源音轨

3.3、可在轨道上对音效做简单的编辑

我们可以对音轨做裁剪

还可以将音轨做分割

分割成两个片段

4、Control Track轨道

Control Track轨道可以添加粒子效果,同时也可以添加子Timeline进行嵌套。

4.1 控制粒子特效

先创建一个粒子

然后将粒子拖到Control Track轨道中(或者在轨道上右键菜单 - Add From Game Object,然后选择对应的粒子GameObject

即可使用Control Track轨道播放粒子

有趣的是,我们还可以在轨道上倒放预览粒子

甚至对粒子做裁切分割

4.2 嵌套Timeline

先创建一个SubTimeline,在SubTimeline中控制Cube移动

在后在原来的Timeline(主Timeline)中创建Control Track轨道,并把SubTimeline(子Timeline)拖动到轨道中,这样,就实现了Timeline嵌套

效果如下

5、Signal Track轨道

Signal Track信号轨道,可以发送信号,触发响应信号的函数调用。

5.1、 响应信号的物体和脚本

Hierachy中创建一个空物体,重名名为SignalReceiver

创建一个C#脚本SignalTest.cs,挂到上面的物体上(会自动绑定挂上SignalReceiver组件),用于响应信号
代码如下:

using UnityEngine;
using UnityEngine.Timeline;[RequireComponent(typeof(SignalReceiver))]
public class SignalTest : MonoBehaviour
{// 信号的响应函数public void OnReceiveSignal(){Debug.Log("OnReceiveSignal: Hello Signal");}
}

5.2、创建Signal Track轨道,设置响应物体

Timeline中创建Signal Track信号轨道

SignalReceiver物体拖到信号轨道的物体槽中

5.3、创建信号发射器Signal Emitter

创建一个信号发射器资源(Signal Emitter),在Project视图右键菜单 - Create - Signal


将信号发射器拖到轨道上

5.4、给信号发射器设置响应函数

点击轨道上的信号发射器,在Inspector视图中会显示信号信息,Add Reaction按钮,添加信号的响应函数

默认信号接收对象就是SignalReceiver组件所在的物体

点击No Function可以列出物体上的组件和组件中的所有public属性和方法,这里我们设置响应函数为SignalTest脚本的OnReceiverSignal函数。

5.5、运行效果

6、Playable Track轨道

Playable Track轨道,可以添加自定义的播放功能。

6.1、PlayableAsset和PlayableBehaviour脚本

需要写两个类,一个继承PlayableAsset,一个继承PlayableBehaviour

using UnityEngine;
using UnityEngine.Playables;public class MoveObjPlayableAsset : PlayableAsset
{public GameObject go;public Vector3 pos;public override Playable CreatePlayable(PlayableGraph graph, GameObject owner){var bhv = new MoveObjPlayableBehaviour();bhv.go = go;bhv.pos = pos;return ScriptPlayable<MoveObjPlayableBehaviour>.Create(graph, bhv);}
}
using UnityEngine;
using UnityEngine.Playables;public class MoveObjPlayableBehaviour : PlayableBehaviour
{public GameObject go;public Vector3 pos;public override void OnGraphStart(Playable playable){base.OnGraphStart(playable);Debug.Log("OnGraphStart=======================");}public override void OnGraphStop(Playable playable){base.OnGraphStop(playable);Debug.Log("OnGraphStop=======================");}public override void OnBehaviourPlay(Playable playable, FrameData info){// 这里的逻辑是改变物体的坐标,具体逻辑就看具体需求base.OnBehaviourPlay(playable, info);Debug.Log("OnBehaviourPlay=======================");if (null != go){go.transform.position = pos;}}public override void OnBehaviourPause(Playable playable, FrameData info){base.OnBehaviourPause(playable, info);Debug.Log("OnBehaviourPause=======================");if (null != go){go.transform.position = Vector3.zero;}}public override void OnBehaviourDelay(Playable playable, FrameData info){base.OnBehaviourDelay(playable, info);Debug.Log("OnBehaviourDelay=======================");}
}
6.2、将PlayableAsset拖到轨道上

MoveObjPlayableAsset脚本直接拖动到PlayableTrack轨道上,具体的脚本逻辑在MoveObjPlayableBehaviour中实现,本例是设置物体的坐标

点击轨道上的MoveObjPlayableAsset,可以在Inspector视图中看到对应的参数

6.3、动态设置PlayableAsset参数

现在,我们另外写一个脚本(Runner.cs),运行的时候动态地给MoveObjPlayableAsset设置GO对象。
首先我们将轨道名字改成MyPlayableTest,因为下面的代码需要通过名字来获取改轨道对象。

Runner.cs脚本挂到Timeline物体上,并赋值Timeline变量和Cube变量,如下

Runner.cs代码如下

using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;public class Runner : MonoBehaviour
{public PlayableDirector timelinePlayer;public GameObject cube;void Start(){var timeline = timelinePlayer.playableAsset;foreach (var binding in timeline.outputs){// 轨道名var trackName = binding.streamName;if ("MyPlayableTest" == trackName){// 轨道var track = binding.sourceObject as TrackAsset;// 轨道上的片段,每个片段都是PlayableAsset的子类var clipList = track.GetClips();foreach (var clip in clipList){if (clip.asset is MoveObjPlayableAsset){var moveObjPlableAsset = clip.asset as MoveObjPlayableAsset;// 动态设置go对象的坐标moveObjPlableAsset.go = cube;moveObjPlableAsset.pos = new Vector3(-4.91f, 0, 0);break;}}}}}
}
6.4、运行效果

五、答疑

1、Timeline如何实现倒放

先看下正放的效果:

我们可以通过PlayableDirectortime属性,从大到小,即可实现倒放,例:

using UnityEngine;
using UnityEngine.Playables;public class Runner: MonoBehaviour
{public PlayableDirector timelinePlayer;private double m_timer;void Start(){// 获取总时长m_timer = timelinePlayer.duration;timelinePlayer.Play();}void Update(){// 倒放if (m_timer > 0)m_timer -= Time.deltaTime;timelinePlayer.time = m_timer;}
}

运行Unity,倒放效果如下:

待续

欢迎评论区提问

手把手教你在Unity2020中使用Timeline相关推荐

  1. python正确的输入语句_手把手教你在python中如何使用while True语句

    在学习过程中,经常能遇到采用while True的用法.下面以一个例子进行说明: 建立一个用户登录系统,用户输入用户名和密码,如果正确就可以进入系统. 1.我自己最开始的写法:d = {} #数据库字 ...

  2. 脸部匹配测试软件,手把手教你在浏览器中使用脸部识别软件包

    原标题:手把手教你在浏览器中使用脸部识别软件包 雷锋网按:本文为雷锋字幕组编译的技术博客,原标题 face-api.js - Java API for Face Recognition in the ...

  3. 【小白目标检测】手把手教你做视频中的实时目标检测(基于Pelee算法)

    手把手教你做视频中的实时目标检测(基于Pelee算法) 0. 先看效果: 1. 算法详解: 2. 下载源码: 3. 运行检测: 有需求的大佬欢迎加入我的接单群,需求详情请群里戳群主 获取源码或数据集: ...

  4. 手把手教你在VSCode中使用Git

    我本身也多次看到他们用vscode查看修改prometheus代码 摘自:https://mp.weixin.qq.com/s/De7BFnT6cSL6ajvYoiNYkQ 手把手教你在VSCode中 ...

  5. 手把手教在VMware虚拟机中安装Windows11系统

    如何使用虚拟机VMware安装Win11呢?这里小编为大家带来了详细的图文教程,手把手教在VMware虚拟机中安装Windows11系统,需要的朋友不要 错过了,收藏起来吧! 首先我们在电脑上下载并安 ...

  6. 手把手教你在C++中配置Gurobi

    手把手教你在C++中配置Gurobi C++中配置Gurobi:视频教程 C++中配置Gurobi 新建C++项目 配置C/C++外部包含目录 配置链接器的附加目录库和附加依赖项 案例测试 参考资料 ...

  7. python文本分类_手把手教你在Python中实现文本分类.pdf

    手把手教你在Python 中实现文本分类(附代码.数 据集) 引言 文本分类是商业问题中常见的自然语言处理任务,目标是自动将文本文件分到一个 或多个已定义好的类别中.文本分类的一些例子如下: • 分析 ...

  8. 手把手教你在Hexo中使用Github贡献日历(以Next主题为例)

    手把手教你在Hexo中使用Github贡献日历(以Next主题为例) 起因 现在开始! 最简单的方法 自定义贡献日历的配色方案 放进首页和归档页(以Next主题为例) :warning: 注意 最终效 ...

  9. 手把手教你在虚拟机中安装JDK和mysql

    手把手教你在虚拟机中安装JDK和mysql 安装JDK和mysql Host is not allowed to connect to this MySQL server 卸载mysql服务 安装JD ...

  10. 【网络教程】群晖安装甜糖最新教程,手把手教您在Docker中安装官方甜糖

    文章目录 群晖安装Docker Docker安装甜糖官方固件 以前与大家分享了[网络教程]群晖中如何安装甜糖,手把手教您Docker安装甜糖,如何解决甜糖安装&使用中遇到的问题(已解决)!,但 ...

最新文章

  1. 程序运行过程中遇到“ORA-03114: not connected to ORACLE”的问题解决
  2. 由浅入深:自己动手开发模板引擎——置换型模板引擎(一)
  3. html元素和属性,HTML常用元素和属性(一)
  4. dynamic_caast操作符
  5. 图解LanHelper 使用
  6. C# Excel 导入
  7. JVM:7种垃圾回收器总结
  8. 为什么我从 npm 到 yarn 再到 npm?
  9. 北斗导航 | 卫星导航基础知识(伪随机噪声码)
  10. Java 9 揭秘(1. 入门介绍)
  11. python代码异常对照表格_Python表格py错误(pandas错误?)
  12. 一个长方体玻璃容器从里面量长宽_泰来包装分享:如何设计钢边箱里面中型木包装箱...
  13. springboot socket服务端_SpringBoot2.x系列教程81--SpringBoot中整合WebSockets
  14. [CF1073E]Segment Sum
  15. oslo_messaging使用eventlet executor时rpc无法调用的问题
  16. 合成未来宝宝照片_父母照片重叠是宝宝长相?关晓彤鹿晗颜值逆天,邓超孙俪……...
  17. 王道计算机考研图书勘误表公布!
  18. Xenserver命令大全
  19. Mac命令行 显示隐藏文件夹 不显示隐藏文件夹
  20. 服务器 备案 文档,备案需要备案服务器

热门文章

  1. Linux下设置网卡速率 降低网卡速度
  2. nas服务器用户无访问权限,群晖NAS文件权限管理和账户的权限
  3. 贝叶斯神经网络 BNN
  4. P3324 [SDOI2015]星际战争二分答案+网络流
  5. 基于51单片机的555定时器测电容proteus仿真
  6. 三创赛优秀作品_厉害了!珠海这所学校的大学生夺得“三创赛”全国总决赛一等奖...
  7. 为什么有人劝别选计算机专业?
  8. Adaptive让 Spark SQL 更高效更智能
  9. nuc7 android x86,OpenWrt X86 X64 NUC刷写教程
  10. 数据库相关类型(日期、复合、bit、布尔)