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


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

    普通用法

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

    添加信号

    我们添加一个信号资源
    在这里插入图片描述
    生成后可以看到资源文件,这个是可以拖到SignalTrack上的。
    在这里插入图片描述

    我们在Timeline上添加两个信号轨道,并拖动信号到轨道上。
    在这里插入图片描述
    然后我们看到两个信号接收器还是空的,我们可以添加信号接收。

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

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

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class SignalGetTest : MonoBehaviour
    {
        public void GetSignal(int sig)
        {
            Debug.Log("接收到信号"+sig);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    然后我们建立两个接收器来接收这两个信号。
    在这里插入图片描述
    在这里插入图片描述
    这里就是比较麻烦的地方,因为int参数是在接收脚本上的,所以需要两个接收。

    把接收器拖入轨道引用里

    把1拖入1,2拖入2。
    在这里插入图片描述
    我们执行看结果.
    在这里插入图片描述
    这就是最基础的用法了,这里因为信号不带参数所以不方便使用,这里我添加了两个接收器,或者可以创建不同的信号来实现,那么如何使用一个信号发送带参数不就很方便了,下面我们来看如何制作。

    好用的办法

    我们需要3个脚本:
    一个自定义接收器,一个带参数的Mark信号,一个自定义轨道。
    先贴上脚本:

    Mark信号

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

    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;
    
       
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    我们可以看到下面就多了Add 我的信号
    在这里插入图片描述

    接收器

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

    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);
            }
            
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    轨道

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

    
    using System.ComponentModel;
    
    using UnityEngine.Timeline;
    
    [TrackBindingType(typeof(MySignalReceiver))]
    [DisplayName("我的信号轨道")]
    public class MySignalTrack : MarkerTrack
    {
        
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在Timeline上点击鼠标右键,我们就可以添加轨道了。
    在这里插入图片描述
    在这里插入图片描述
    然后我们需要把脚本对象拖动上去
    在这里插入图片描述
    然后我们添加两个信号
    在这里插入图片描述
    并且可以输入信号的参数。

    我们运行看效果
    在这里插入图片描述
    这样就实现了自定义信号,也不麻烦还很好用。

  • 相关阅读:
    伪元素添加点击事件
    安卓okhttp网络请求封装使用
    智慧工地APP全套源码,智慧工地云平台
    《最新出炉》系列入门篇-Python+Playwright自动化测试-44-鼠标操作-上篇
    Windows重定向技术【文件重定向与注册表重定向】
    移动魔百盒UNT401A、UNT403A、UNT413A_晶晨S905L3A/B芯片_红外蓝牙语音_免拆卡刷固件
    非关系数据库
    数据库错误知识集2
    MySQL之my.cnf配置文件
    Vue中的.sync修饰符
  • 原文地址:https://blog.csdn.net/thinbug/article/details/136700954