[Unity] 【转载】Unity 2019.1新功能:Timeline Signals

查看:1130 |回复:2 | 2019-11-25 16:39:24

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 源支始 于 2019-11-26 20:49 编辑

自从Unity 2017.1发布Timeline以来,受到了广大开发者的欢迎,创作出不少精彩作品。我们也收到很多反馈,其中一项就是Timeline事件功能的请求,它是Timeline缺少的功能,一些用户通过剪辑实现了事件功能,但剪辑有自身的缺点。





本文将为你介绍在Unity 2019.1中新推出的Timeline Signals信号功能。
Snipaste_2019-11-26_20-48-46.jpg

2dcb96ec-f2d9-4c7c-900c-78d1670ea3bd_640_6.jpeg


新功能:Marker标记

Marker标记功能可以向Timeline添加的新内容,它用于表示一个时间点。



标记可以在Timeline上和剪辑一样添加和处理,能够使用选取,复制粘贴和编辑模式等功能。就像剪辑一样,标记也有具体类型,例如:剪辑分为动画剪辑、激活剪辑、控制剪辑等类型。

在Unity 2019.1中,Timeline提供了首个内置标记:Signal Emitter信号发射器标记。

Signal Emitter信号发射器

Signal Emitter信号发射器用于在Timeline经过特定时间点的时候,触发场景状态的改动。

我们使用了信号(Signal)而不是事件(Event),因为信号有“广播”的特点,而不会混淆已有的Unity事件和动画事件。

如何添加Signal Emitter信号发射器

Signal Emitter信号发射器可以添加到Timeline和轨道上,但会有某些限制。


  • 添加到Timeline上:这是Unity 2019.1版本的新概念,信号可以添加到Timeline本身,此时不需要使用轨道。
  • 添加到轨道上:信号也可以添加到任意轨道,只要轨道接受绑定即可。我们也加入了新的轨道类型,即Signal Track信号轨道。这类轨道只接受信号,不接受剪辑。


工作原理

为了在Timeline上正确设置信号,我们需要三个部分:


  • Signal Asset信号资源:信号资源是发射器和接收器之间的联系。通常信号资源会用作标识符。
  • Signal Emitter信号发射器: 信号发射器会放在Timeline上,它包含对信号资源的引用。运行信号发射器时,如果当前时间比发射器的时间大,发射器会被触发,发射器会把信号资源发送到信号接收器。
  • Signal Receiver信号接收器:信号接收器是带有一组反应的组件,每个反应都关联到信号资源。当接收器知道信号已被触发时,它会激活关联到对应信号资源的反应。

如下图所示,当关联到同一信号资源的发射器触发时,相应反应会被激活。



我们主要的设计思路是,使发送信号的部分即发射器,尽可能独立于监听并对信号作反应的部分即接收器。这种设计会提高灵活性,而且非常强大。

使用Singal Emitter信号发射器

创建Timeline,单击编辑模式按钮附近的图钉按钮。



此时会显示Timeline Marker区域,在时间标尺下的区域单击右键,选择Add Signal Emitter进行添加信号发射器。



在Signal Emitter信号发射器检视窗口中,单击Create Signal…,在项目中创建新的信号资源。单击Add Signal Receiver进行添加信号接收器,检视窗口如下图所示。



Add Signal Receiver添加信号接收器有以下行为:

它会添加新的Signal Receiver 组件到关联对象。如果信号发射器位于轨道上,该组件会添加到轨道的关联对象。如果信号发射器位于Timeline那么带有PlayableDirector的游戏对象会得到新的Signal Receiver组件。



它会添加新反应,该反应关联着刚创建的信号资源。



我们可以使用Unity Event UI来定义在信号发射器触发时激活的事件。

重要的是,Signal Emitter检视窗口首先会先显示与信号发射器相关的属性,它也会显示接收信号的信号接收器。

如下图所示,启用Retroactive属性时,如果Timeline开始播放信号时间点后的内容,它会触发信号。启用Emit Once属性时,在Timeline循环播放时,它只会触发信号一次。



使用Signal Receiver信号接收器

现在查看Signal Receiver信号接收器组件,单击带有Signal Receiver组件的游戏对象。



它会显示我们之前看到的内容,Explosion信号关联着空白的UnityEvent。



假设我们想要添加一个新的信号资源,我们可以单击Add Reaction按钮。新的反应添加了,但它未关联任何内容。

现在单击下拉列表,选择Create Signal...。



下面是创建新资源的结果。



Signal Receiver组件现在已经设置好,它能在接收Explosion和Load Scene信号时激活反应。

如果我们返回到Timeline,可以添加发送Explosion或Load Scene信号的信号发射器,我们也可以轻松切换二个发射器。





如何设置第一个信号

我们需要进行下面的操作:


  • 右键单击支持信号的轨道,选择Add Signal Emitter;
  • 在检视窗口中,单击Create Signal Asset,选择文件名并按下Enter;
  • 在检视窗口中,单击Create Reaction 按钮。

这样简单操作后,大功告成。在Unity Event UI中,我们可以设置关联新信号的必要反应。





评分

参与人数 1元素币 +10 活跃度 +10 展开 理由
源支始 + 10 + 10

查看全部评分

2019-11-25 16:39:24  
 赞 赞 0

使用道具 登录

2个回答,把该问题分享到群,邀请大神一起回答。
2#
回复 收起回复
2020-8-11 13:44:37   回复
 赞 赞 0

使用道具 登录

3#
感谢楼主分享!
回复 收起回复
2021-2-23 11:03:22   回复
 赞 赞 0

使用道具 登录

CG 游戏行业专业问题

手机游戏引擎手游引擎Unity3D技术
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表