TimeLine之Signal功能

Unity 2019.1中新推出的Timeline Signals信号功能。

新功能:Marker标记

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

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

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

Signal Emitter信号发射器

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

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

1、如何添加Signal Emitter信号发射器

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

添加到Timeline上:这是Unity 2019.1版本的新概念,信号可以添加到Timeline本身,此时不需要使用轨道。

添加到轨道上:信号也可以添加到任意轨道,只要轨道接受绑定即可。我们也加入了新的轨道类型,即Signal Track信号轨道。这类轨道只接受信号,不接受剪辑。

注意:下图中Demo和TimeLineCtr都有一个SignalEmitter和SignalRecevier,并且都是通过同一个SignalAsset链接的发射器和接收器,但是信号发射器执行时候只查找自身物体上所带有的SignalRecevier中绑定的监听事件。

即:

1、直接在TineLine上添加信号发射器:TimeLineCtr(带有PlayableDirector组件)中Markers一行对应一个SingalEmitter,这个只把信号发给TimeLineCtr上的SignalRecevier.

2、在TimeLine中创建SignalTrack轨道Demo,并在轨道上创建SignalEmitter,这个信号发射器只发送事件到Demo上的SignalRecevier组件。

3、和Animator动画事件类似,消息只发送到自身组件响应(假如有事件监听组件)。

信号响应回调方法只可以是public、无参或者一个参数(float、int、string、bool、object)。

2、工作原理

为了在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信号的信号发射器,我们也可以轻松切换二个发射器。

猜你喜欢

转载自blog.csdn.net/Liumotor/article/details/113608225