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

news/2024/5/18 21:35:47 标签: unity, timeline, marker, signal
marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

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

普通用法

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

添加信号

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

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

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

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

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,类似于信号。

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就显示出来,如果你有多个信号类型可以自行扩充。这个脚本挂在一个对象上就可以了。
在这里插入图片描述
脚本如下:

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类型就是我们的接收器。


using System.ComponentModel;

using UnityEngine.Timeline;

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

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

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


http://www.niftyadmin.cn/n/5434231.html

相关文章

如何利用图像识别算法检测人是否打领带

使用图像识别算法来检测图像中的人是否打了领带,可以分为几个步骤来进行: 图像收集与预处理: 收集大量包含人的图像数据,其中一些图像中人打了领带,另一些则没有。对这些图像进行预处理,如大小归一化、灰度…

【Git版本控制系统】:起步

目录 前言 版本控制 集中式与分布式的区别 Windows安装Git 核心 文件状态 工作区域 基本工作流程 配置用户信息 获取帮助 在线资源 前言 本篇文件的环境是Windows环境下实现。 在日常工作中git少不了,所以编写本篇文章介绍Git基础,专栏会不…

淘宝基于Nginx二次开发的Tengine服务器

最近在群里看到这样一张阿里云网关报错的截图,我保存下来看了下 看到下面有 Tengine提供技术支持,这个Tengine是什么东西呢?我搜索了下似乎是淘宝在nginx的基础上自己改的Web服务器 淘宝网核心系统部开发的Tengine服务器 基本上&#xff0…

Java学习笔记(15)

JDK7前时间相关类 Date时间类 Simpledateformat Format 格式化 Parse 解析 默认格式 指定格式 EE:表示周几 Parse:把字符串时间转成date对象 注意:创建对象的格式要和字符串的格式一样 Calendar日历类 不能创建对象 Getinstance 获取当…

Android 系统的启动过程

Android 系统的启动流程: RomBoot(只读存储器引导程序):这是设备上电时运行的初始软件。RomBoot执行基本的硬件初始化,确保硬件处于可以运行后续启动阶段的状态。这一阶段非常重要,因为它为整个启动过程奠定…

ChatGPT登陆提示:“Please unblock challenges.cloudflare.com to proceed…”

ChatGPT登陆时提示:“Please unblock challenges.cloudflare.com to proceed”, 说明:请解除对challenges.cloudflare.com的屏蔽以继续 原因及解决方法: 1、出现这个问题,一般都是网络和本地环境问题,可以…

ubuntu22.04 在wifi网络正常使用的情况下创建热点连接

ubuntu22.04 在wifi网络正常使用的情况下创建热点连接 在ubuntu22.04版本中正常通过设置打开wifi热点会取消正常的wifi网络连接 接下来让我们一起尝试在wifi网络正常的情况下创建热点连接 查看硬件是否支持 iw list | grep AP #查看是否支持AP模式 Device supports AP-side…