Unity Timeline学习笔记(3) - SignalTrack信号轨道和自定义带参数的Marker信号和轨道

信号轨道,顾名思义就是运行到某处发送一个信号。

普通用法

普通用法就是没有任何封装的,个人感觉特别难用,但是有必要理解一下工作原理。

添加信号

我们添加一个信号资源

生成后可以看到资源文件,这个是可以拖到SignalTrack上的。

我们在Timeline上添加两个信号轨道,并拖动信号到轨道上。

然后我们看到两个信号接收器还是空的,我们可以添加信号接收。

自定义一个接收信号的脚本

我们创建一个普通的接收脚本。

csharp 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SignalGetTest : MonoBehaviour
{
    public void GetSignal(int sig)
    {
        Debug.Log("接收到信号"+sig);
    }
}

然后我们建立两个接收器来接收这两个信号。

这里就是比较麻烦的地方,因为int参数是在接收脚本上的,所以需要两个接收。

把接收器拖入轨道引用里

把1拖入1,2拖入2。

我们执行看结果.

这就是最基础的用法了,这里因为信号不带参数所以不方便使用,这里我添加了两个接收器,或者可以创建不同的信号来实现,那么如何使用一个信号发送带参数不就很方便了,下面我们来看如何制作。

好用的办法

我们需要3个脚本:

一个自定义接收器,一个带参数的Mark信号,一个自定义轨道。

先贴上脚本:

Mark信号

我的信号需要继承Marker,类似于信号。

csharp 复制代码
using UnityEngine.Playables;
using UnityEngine.Timeline;
using UnityEngine;
using System.ComponentModel;

[DisplayName("我的信号")]
public class MySignal : Marker, INotification, INotificationOptionProvider
{
    public string sigName;
    public int sigParm1;
    public PropertyName id { get; }

    NotificationFlags INotificationOptionProvider.flags => NotificationFlags.TriggerOnce | NotificationFlags.TriggerInEditMode;

   
}

我们可以看到下面就多了Add 我的信号

接收器

这里负责处理不同的信号类型,我这里写了如果是MySignal就显示出来,如果你有多个信号类型可以自行扩充。这个脚本挂在一个对象上就可以了。

脚本如下:

csharp 复制代码
using UnityEngine.Playables;
using UnityEngine;

class MySignalReceiver : MonoBehaviour,INotificationReceiver
{
    public void OnNotify(Playable origin, INotification notification, object context)
    {
        if (notification is MySignal)
        {
            MySignal signal = (MySignal)notification;
            Debug.Log(signal.sigName + "," + signal.sigParm1);
        }
        
    }
}

轨道

然后是我们的轨道,我们看到这个轨道Binding类型就是我们的接收器。

csharp 复制代码
using System.ComponentModel;

using UnityEngine.Timeline;

[TrackBindingType(typeof(MySignalReceiver))]
[DisplayName("我的信号轨道")]
public class MySignalTrack : MarkerTrack
{
    
}

在Timeline上点击鼠标右键,我们就可以添加轨道了。

然后我们需要把脚本对象拖动上去

然后我们添加两个信号

并且可以输入信号的参数。

我们运行看效果

这样就实现了自定义信号,也不麻烦还很好用。

相关推荐
逐·風5 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
_oP_i6 小时前
Unity Addressables 系统处理 WebGL 打包本地资源的一种高效方式
unity·游戏引擎·webgl
Leoysq15 小时前
【UGUI】实现点击注册按钮跳转游戏场景
游戏·unity·游戏引擎·ugui
_oP_i18 小时前
unity中 骨骼、纹理和材质关系
unity·游戏引擎·材质
Padid1 天前
Unity SRP学习笔记(二)
笔记·学习·unity·游戏引擎·图形渲染·着色器
Tp_jh1 天前
推荐一款非常好用的C/C++在线编译器
linux·c语言·c++·ide·单片机·unity·云原生
dangoxiba2 天前
[Unity Demo]从零开始制作空洞骑士Hollow Knight第十八集补充:制作空洞骑士独有的EventSystem和InputModule
游戏·unity·c#·游戏引擎·playmaker
无敌最俊朗@2 天前
unity3d————屏幕坐标,GUI坐标,世界坐标的基础注意点
开发语言·学习·unity·c#·游戏引擎
_oP_i2 天前
Unity 中使用 WebGL 构建并运行时使用的图片必须使用web服务器上的
前端·unity·webgl
司军礼2 天前
Unity自动打包——Shell交互
unity·游戏引擎·交互