查看原文
其他

使用Unity 2019.1中的Timeline Signals

Unity Unity官方平台 2022-05-07

自从2017年推出Timeline功能以来,很多开发者一直期待Timeline加入发送事件的方法。从Unity 2019.1版开始,Timeline Signals信号功能可以帮助你发送事件。

 

本文将介绍使用最新的Timeline Signals信号功能。


Signals信号

下图是Signals信号在Timeline窗口里的样子。


 

我们开发Signals信号的目的是建立Timeline和外部系统的沟通渠道,你可能会有疑问:这意味着什么?为什么我们决定使用这种方法?

 

假设我们使用Timeline制作过场动画,在过场动画结束时,如果我们想要加载新场景,并启用物理系统。有如下方法可以进行处理:

 

  • 当过场动画结束时,使用自定义脚本使Timeline实例与场景管理器和物理系统进行交互。


  • 当过场动画结束时,创建标记和信号,用于发送"Cutscene finished"(过场动画已完成)的信号,并让相关系统对信号作出反应。

 

Unity Timeline开发团队选择使用第二种方法,因为它可以保持发射器独立于接收器,保持它们各自的独立可以实现更大的灵活性,功能性和重用性。


为了深入了解这种方法,下面我们介绍不同部分如何协作。


协作方式

为了使用信号能够与外部系统沟通,我们需要三个部分:Signal Asset信号资源、Signal Emitter信号发射器和Signal Receiver信号接收器。

 


Signal Emitter信号发射器:信号发射器包含对信号资源的引用。在Timeline上,信号发射器通过标记来显示。我们可以把标记放到轨道上,或放到Timeline时间标尺下的Markers区域。


 

Signal Receiver信号接收器:信号接收器是带有一组反应的组件,每个反应都关联到信号资源。

 

Signal Asset信号资源:信号资源是发射器和接收器之间的联系。我们可以在多个Timeline实例中重用相同的信号资源。


游戏示例

下面视频展示了一个简单的游戏,玩家通过按下屏幕上箭头图像对应的方向键来击败僵尸兔。

 

 

箭头图像随着每次音乐节拍而随机变化。如果在图像变化前没有按下正确的方向键,则游戏失败。如果按下一定数量的方向键,则赢得游戏。

 

在游戏中,GameTimeline实例包含游戏过程,它通过使用信号来随着每次音乐节拍展示新箭头图像,如下图的GameTimeline实例所示。



为了演示如何创建和设置信号,我们从没有创建过信号的项目入手。如果你想跟着文章步骤操作,可以下载项目文件:

https://github.com/Unity-Technologies/TimelineSignalsTutorial/blob/master/Demo

 

首先,我们查看添加信号的Markers区域,单击Clip Edit模式旁边的Marker图标,Markers区域显示在Timeline时间标尺下。



添加信号发射器,右键单击Markers区域,选择Add Signal Emitter。

 

 

信号发射器显示在Markers区域。

 

 

选中新添加的信号发射器时,检视窗口会显示它的属性,检视窗口也提供创建其它信号的按钮。



为了联系信号发射器和信号接收器,我们需要添加信号资源。在检视窗口中,单击Create Signal…按钮。因为该信号资源会联系发射器和接收器,以改变箭头图像,所以命名信号资源为“ShowKey”。单击Save后,信号资源会添加到项目中。

 

我们还要让信号发射器关联信号接收器。单击Add Signal Receiver按钮,检视窗口如下图所示。

 

 

我们先讲解一下这些步骤。在按下Add Signal Receiver按钮时,会发生二个行为:新的Signal Receiver组件会添加到关联对象,新反应会添加并关联到刚创建的信号资源。


通过观察发现,“ShowKey”显示为Emit Signal属性,并且被添加到反应列表,因此我们知道它们已经互相关联。



检视窗口显示二个内容:信号发射器属性和Signal Receiver组件定义的反应。



虽然Signal Receiver组件联系的游戏对象关联着Timeline实例,但我们也可以在检视窗口编辑信号接收器,信号接收器接收信号时会激活反应。

 

最后一步是指定反应的行为。在本示例中,有一个附带ShowRandomKey方法的Manager组件,该方法会显示新的随机方向键。为了让反应调用ShowRandomKey方法,选择该方法为Unity事件,如下图所示。


 

这样就完成了。在添加信号发射器并定义信号接收器及反应后,我们有了一个和场景沟通的Timeline实例。

 

Timeline激活信号发射器时会发射ShowKey信号,然后监听ShowKey信号的信号接收器调用ShowRandomKey方法。

 

更进一步的是,我们还支持多个信号发射器发射相同的信号,例如:下面的Timeline实例有多个相同的信号发射器,它们被复制和移动到不同的时间点,每个音乐节拍都有一个发射器。

 

 

我们可以从项目窗口把信号资源直接拖到Timeline窗口,这样会自动创建设置好Emit Signal属性的信号发射器。


下载带有所有信号的完整项目:

https://github.com/Unity-Technologies/TimelineSignalsTutorial/blob/master/CompleteGame


回顾

设置信号时,我们需要完成下面三件事:

  • 右键单击Markers区域或支持信号的轨道,然后选择Add Signal Emitter…。

  • 在检视窗口中,单击Create Signal Asset按钮,设置文件名并按下回车键。

  • 在检视窗口中,单击Create Reaction…按钮,给刚创建的信号定义关联的反应。


常见问题

Q:是否可以在单个游戏对象上有多个接收器?

A:可以,对象上的所有信号接收器都会接收发送到该对象的信号。

 

Q:信号资源是否可以在多个Timeline实例间重用?

A:可以,信号资源可以用在多个Timeline实例上。

 

Q:信号资源是否可以扩展和自定义?

A:可以,信号资源、信号发射器和信号接收器都可以进行扩展,我们会后溪的文章中进行介绍信号资源自定义和扩展内容。

  

Q:信号是否一定会发射?

A:是的,信号不会被跳过,无论游戏帧数如何,信号都会发射到下一帧。


Q:如果复制包含信号发射器的Timeline资源,会发生什么?

A:信号发射器会保留对信号资源的引用,但信号资源不会被复制。

 

小结

Unity 2019.1最新的Timeline Signals功能与使用方法就介绍到这里,更多Unity新功能介绍,尽在Unity Connect平台(Connect.unity.com)。

 

下载Unity Connect APP,请点击此处。 观看部分Unity官方视频,请关注B站帐户:Unity官方



推荐阅读

 Unity中的实时光线追踪技术剖析

Unity Profile Analyzer工具介绍

使用PiXYZ 2019.1简化数据处理工作流程

使用多维报告功能改进Unity广告的分析结果

Unity 2019.1中的Animation Rigging资源包

《使命召唤手游》,引擎技术升级与演化


有奖调查

Unity Hub 2.0中文版以及Unity中文版文档已发布,请参与有奖调查,反馈你的意见,以便我们进一步改进。更多详情,请访问此处。



点击“阅读原文”访问Unity Connet

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存