手把手教你在Unity2020中使用Timeline
文章目录
- 一、关于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如何实现倒放
先看下正放的效果:
我们可以通过PlayableDirector
的time
属性,从大到小,即可实现倒放,例:
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相关推荐
- python正确的输入语句_手把手教你在python中如何使用while True语句
在学习过程中,经常能遇到采用while True的用法.下面以一个例子进行说明: 建立一个用户登录系统,用户输入用户名和密码,如果正确就可以进入系统. 1.我自己最开始的写法:d = {} #数据库字 ...
- 脸部匹配测试软件,手把手教你在浏览器中使用脸部识别软件包
原标题:手把手教你在浏览器中使用脸部识别软件包 雷锋网按:本文为雷锋字幕组编译的技术博客,原标题 face-api.js - Java API for Face Recognition in the ...
- 【小白目标检测】手把手教你做视频中的实时目标检测(基于Pelee算法)
手把手教你做视频中的实时目标检测(基于Pelee算法) 0. 先看效果: 1. 算法详解: 2. 下载源码: 3. 运行检测: 有需求的大佬欢迎加入我的接单群,需求详情请群里戳群主 获取源码或数据集: ...
- 手把手教你在VSCode中使用Git
我本身也多次看到他们用vscode查看修改prometheus代码 摘自:https://mp.weixin.qq.com/s/De7BFnT6cSL6ajvYoiNYkQ 手把手教你在VSCode中 ...
- 手把手教在VMware虚拟机中安装Windows11系统
如何使用虚拟机VMware安装Win11呢?这里小编为大家带来了详细的图文教程,手把手教在VMware虚拟机中安装Windows11系统,需要的朋友不要 错过了,收藏起来吧! 首先我们在电脑上下载并安 ...
- 手把手教你在C++中配置Gurobi
手把手教你在C++中配置Gurobi C++中配置Gurobi:视频教程 C++中配置Gurobi 新建C++项目 配置C/C++外部包含目录 配置链接器的附加目录库和附加依赖项 案例测试 参考资料 ...
- python文本分类_手把手教你在Python中实现文本分类.pdf
手把手教你在Python 中实现文本分类(附代码.数 据集) 引言 文本分类是商业问题中常见的自然语言处理任务,目标是自动将文本文件分到一个 或多个已定义好的类别中.文本分类的一些例子如下: • 分析 ...
- 手把手教你在Hexo中使用Github贡献日历(以Next主题为例)
手把手教你在Hexo中使用Github贡献日历(以Next主题为例) 起因 现在开始! 最简单的方法 自定义贡献日历的配色方案 放进首页和归档页(以Next主题为例) :warning: 注意 最终效 ...
- 手把手教你在虚拟机中安装JDK和mysql
手把手教你在虚拟机中安装JDK和mysql 安装JDK和mysql Host is not allowed to connect to this MySQL server 卸载mysql服务 安装JD ...
- 【网络教程】群晖安装甜糖最新教程,手把手教您在Docker中安装官方甜糖
文章目录 群晖安装Docker Docker安装甜糖官方固件 以前与大家分享了[网络教程]群晖中如何安装甜糖,手把手教您Docker安装甜糖,如何解决甜糖安装&使用中遇到的问题(已解决)!,但 ...
最新文章
- 程序运行过程中遇到“ORA-03114: not connected to ORACLE”的问题解决
- 由浅入深:自己动手开发模板引擎——置换型模板引擎(一)
- html元素和属性,HTML常用元素和属性(一)
- dynamic_caast操作符
- 图解LanHelper 使用
- C# Excel 导入
- JVM:7种垃圾回收器总结
- 为什么我从 npm 到 yarn 再到 npm?
- 北斗导航 | 卫星导航基础知识(伪随机噪声码)
- Java 9 揭秘(1. 入门介绍)
- python代码异常对照表格_Python表格py错误(pandas错误?)
- 一个长方体玻璃容器从里面量长宽_泰来包装分享:如何设计钢边箱里面中型木包装箱...
- springboot socket服务端_SpringBoot2.x系列教程81--SpringBoot中整合WebSockets
- [CF1073E]Segment Sum
- oslo_messaging使用eventlet executor时rpc无法调用的问题
- 合成未来宝宝照片_父母照片重叠是宝宝长相?关晓彤鹿晗颜值逆天,邓超孙俪……...
- 王道计算机考研图书勘误表公布!
- Xenserver命令大全
- Mac命令行 显示隐藏文件夹 不显示隐藏文件夹
- 服务器 备案 文档,备案需要备案服务器
热门文章
- Linux下设置网卡速率 降低网卡速度
- nas服务器用户无访问权限,群晖NAS文件权限管理和账户的权限
- 贝叶斯神经网络 BNN
- P3324 [SDOI2015]星际战争二分答案+网络流
- 基于51单片机的555定时器测电容proteus仿真
- 三创赛优秀作品_厉害了!珠海这所学校的大学生夺得“三创赛”全国总决赛一等奖...
- 为什么有人劝别选计算机专业?
- Adaptive让 Spark SQL 更高效更智能
- nuc7 android x86,OpenWrt X86 X64 NUC刷写教程
- 数据库相关类型(日期、复合、bit、布尔)