如何使用时间线信号

自 2017 年时间线推出以来,我们知道您一直在耐心等待一种发送事件的方式。好吧,别再等了!从 Unity 2019.1开始,一项名为“Signals”的新功能可帮助您发送事件。让我们深入了解一下这个新功能。
信号在时间轴窗口中的样子如下:

我们构建了信号来建立时间线和外部系统之间的通信渠道。但这是什么意思呢?我们为什么决定采用这种方法?
假设您正在使用时间轴创建过场动画。当过场动画结束时,您希望加载一个新场景并启用物理系统。有几种方法可以实现此场景:
当您的过场动画结束时,使用自定义脚本让您的时间线实例直接与场景管理器和物理系统交互。
当过场动画结束时,创建标记和信号以发送“过场动画完成”信号并让感兴趣的系统对该信号做出反应。
Timeline 团队采用了第二种方法,因为它可以使发射器独立于接收器。保持它们的独立性可以增加很多灵活性、功能和可重用性。为了进一步理解这一点,让我们看看各个部分是如何协同工作的。
要使用信号与外部系统通信,您需要三个部分:信号资产、信号发射器和信号接收器。

- 信号发射器:信号发射器包含对信号资产的引用。在时间轴中,信号发射器以标记的形式直观表示。您可以在轨道上或时间线标尺下的标记区域放置标记。

- 信号接收器:信号接收器是一个带有反应列表的组件。每个反应都与一个信号资产相联系。
- 信号资产:信号资产是信号发射器和信号接收器之间的关联。您可以在许多时间轴实例中重复使用相同的信号资产。
这是一个简单的游戏,您可以通过按下与屏幕上显示的方向图像相匹配的箭头键来击败兔子僵尸:
定向图像随着每个音乐节拍随机变化。如果您在图像改变之前没有按下右箭头键,您就输了。如果您按下一定数量的箭头键,您就赢了。
在游戏中,GameTimeline 实例包含游戏玩法。它使用信号随着每个音乐节拍显示新的方向图像,如下面的完成的 GameTimeline 实例所示:

为了演示如何创建和设置信号,让我们从一个尚未创建任何信号的项目开始。如果您想继续,可以 在此处下载该项目。
首先,要查看添加信号的标记区域,请单击剪辑编辑模式旁边的标记图标。标记区域出现在时间轴标尺下方:

要添加信号发射器,请在标记区域单击鼠标右键,然后选择 添加信号发射器。

信号发射器出现在标记区域:

您刚刚添加的信号发射器被选中,并且检查器窗口显示其属性。检查器窗口还提供用于创建信号其他部分的按钮:

要将信号发射器链接到信号接收器,您需要添加新的信号资产。在 Inspector 窗口中,单击 Create Signal…。将信号资产命名为“ShowKey”,因为该信号资产将用于链接发射器和接收器以改变定向图像。单击“保存”,信号资产将添加到项目中。
您还希望将信号发射器与信号接收器相关联,因此请单击“添加信号接收器”。你的 Inspector 窗口现在看起来应该是这样的:

在继续之前,让我们停下来并描述一下发生了什么。单击添加信号接收器按钮时,会发生两件事:一个新的 信号接收器 组件被添加到绑定的游戏对象,并且一个新的反应被添加并链接到您刚刚创建的 信号资产 。您可以看到它们是链接的,因为“ShowKey”作为发射信号出现,并且“ShowKey”被添加到反应列表中:

检查器窗口显示两件事:信号发射器属性和信号接收器组件定义的反应:

尽管信号接收器组件已链接到与时间线实例关联的游戏对象,但您可以在检查器窗口中编辑信号接收器。当信号接收器接收到信号时,就会引发反应。
最后一步是明确反应的作用。在此示例中,有一个名为 Manager 的组件,它具有 ShowRandomKey 方法。该方法显示一个新的随机箭头键。为了让反应调用 ShowRandomKey 方法,请为 Unity 事件选择此方法,如下所示:

就是这样!添加信号发射器并定义其信号接收器和反应后,您现在有一个与场景通信的时间轴实例的示例。
当时间线碰到信号发射器时,就会发射 ShowKey 信号。监听 ShowKey 信号的信号接收器调用 ShowRandomKey 方法。
但你不必就此止步。多个信号发射器可以发射相同的信号。例如,以下时间轴实例将相同的信号发射器复制并移动到不同的时间;每个音乐节拍都有一个发射器:
您还可以将信号资产直接从项目窗口拖到时间线窗口。自动创建一个信号发射器,并且 其发射信号 属性已经设置。
要查看包含所有信号的完成项目的样子, 请在此处下载。
为了设置您的第一个信号,您需要:
右键单击标记区域或支持信号的轨道,然后选择 添加信号发射器...
在 Inspector 窗口中,单击 Create Signal Asset,选择文件名并按 Enter。
仍在检查器中,单击 创建反应... 按钮并定义与刚刚创建的信号相关的反应。
- 我可以在单个游戏对象 (GameObject) 上拥有多个接收器吗?是的,游戏对象上的所有信号接收器都会接收发送到该游戏对象的信号。
- 信号资产可以在多个时间线实例之间重复使用吗?是的,信号资产可以在多个时间线实例中使用。
- 信号资产可以扩展和定制吗?是的,信号资产、信号发射器和信号接收器都可以扩展。但这是另一天的话题;将会有另一篇关于定制的博客文章。
- 信号能保证发射吗?是的。信号不会被跳过;无论游戏的 FPS 是多少,它们都会在下一帧发射。
- 如果重复的时间轴资产包含信号发射器会发生什么情况?信号发射器保持对其信号资产的引用。信号资产不会重复。
---
查看 Unity Learn Premium 平台上使用时间轴的初级和高级学习内容。
