Timeline

SignalTrack信号轨道和自定义带参数的Marker信号和轨道

在这里插入图片描述

MySignalReceiver

using System; 
using System.ComponentModel; 
using UnityEngine.Playables;
using UnityEngine.Events;

namespace UnityEngine.Timeline
{ 
    public class BaseSignalReceiver<T, Q> : MonoBehaviour, INotificationReceiver
        where T : MySignalAssetData where Q : BaseSignalEmitter<T>
    {
        [SerializeField] UnityEvent<T> m_Events = new UnityEvent<T>();
        [SerializeField] UnityEvent<string> m_EventStrs = new UnityEvent<string>();

        public virtual void OnNotify(Playable origin, INotification notification, object context)
        {
            if (notification is Q)
            {
                Q signalEmitter = (Q)notification;

                InvokeMember(signalEmitter.mySignalAssetData);
            }
        }

        public virtual void InvokeMember(T mySignalAssetData)
        {
            Debug.Log(mySignalAssetData.ToString());
            m_Events?.Invoke(mySignalAssetData);
            m_EventStrs?.Invoke(UnityEngine.JsonUtility.ToJson(mySignalAssetData));
        }

        public void AddEvent(UnityAction<T> action)
        {
            m_Events.AddListener(action);
        }

        public void RemoveEvent(UnityAction<T> action)
        {
            m_Events.RemoveListener(action);
        }

        public void AddEvent(UnityAction<string> action)
        {
            m_EventStrs.AddListener(action);
        }

        public void RemoveEvent(UnityAction<string> action)
        {
            m_EventStrs.RemoveListener(action);
        }
    }

    public class BaseSignalEmitter<T> : Marker, INotification, INotificationOptionProvider
    {
        NotificationFlags INotificationOptionProvider.flags =>
            NotificationFlags.TriggerOnce | NotificationFlags.TriggerInEditMode;

        public PropertyName id { get; }


        public T mySignalAssetData;
    }  
}
 
namespace UnityEngine.Timeline
{
    [TrackBindingType(typeof(MySignalReceiver))]
    [DisplayName("我的信号轨道")]
    public class MySignalTrack : MarkerTrack
    {
    }
 
    [DisplayName("我的信号接收器")]
    public class MySignalReceiver : BaseSignalReceiver<MySignalAssetData, BaseSignalEmitter<MySignalAssetData>>
    {
        public override void OnNotify(Playable origin, INotification notification, object context)
        {
            base.OnNotify(origin, notification, context);

            if (notification is MySignalEmitter_Variant)
            {
                MySignalEmitter_Variant signalEmitter = (MySignalEmitter_Variant)notification;
                InvokeMember(signalEmitter.mySignalAssetData);
            }
        }
    }
 
    [DisplayName("我的信号")]
    public class MySignalEmitter : BaseSignalEmitter<MySignalAssetData>
    {
    }

    [Serializable]
    [DisplayName("我的信号数据")]
    public class MySignalAssetData
    {
        public string methodName;
        public string msg;
        public int msgType = 0;

        public virtual string ToString()
        {
            return $"{methodName} {msg}";
        }
    }


    [DisplayName("我的信号 变种1")]
    public class MySignalEmitter_Variant : BaseSignalEmitter<MySignalAssetData_Variant>
    {
    }

    [Serializable]
    [DisplayName("我的信号数据 变种1")]
    public class MySignalAssetData_Variant : MySignalAssetData
    {
        public string sex;
        public int age;

        public override string ToString()
        {
            return $"{methodName} {msg} {sex} {age}";
        }
    }
}

TimeLinePlayable_Ctrl

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Timeline;

public class TimeLinePlayable_Ctrl : MonoBehaviour
{
    public MySignalReceiver receiver;

    private void Start()
    {
        receiver.AddEvent(Test_DataEvent);
        receiver.AddEvent(Test_Msg);
    }

    public void Test_Msg(string parameter)
    {
        MySignalAssetData data = UnityEngine.JsonUtility.FromJson<MySignalAssetData>(parameter);

        if (data.msgType == 1)
        {
            MySignalAssetData_Variant parameter2 =  UnityEngine.JsonUtility.FromJson<MySignalAssetData_Variant>(parameter);

            Debug.Log("TestStr:" + parameter2.ToString());
        }
        else
        {
            Debug.Log("TestStr:" + parameter.ToString());
        }

    }

    public void Test_DataEvent(MySignalAssetData parameter)
    {
        if (parameter.msgType == 1)
        {
            MySignalAssetData_Variant parameter2 = parameter as MySignalAssetData_Variant;

            Debug.Log("Test:" + parameter2.ToString());
        }
        else
        {
            Debug.Log("Test:" + parameter.ToString());
        }


    }
    
}

SignalTrack信号轨道和自定义带参数的Marker信号和轨道

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/637855.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

04-Vue:ref获取页面节点--很简单

目录 前言在Vue中&#xff0c;通过 ref 属性获取DOM元素使用 ref 属性获取整个子组件&#xff08;父组件调用子组件的方法&#xff09; 前言 我们接着上一篇文章 03-02-Vue组件之间的传值 来讲。 下一篇文章 05-Vue路由 在Vue中&#xff0c;通过 ref 属性获取DOM元素 我们当然…

CTFHUB技能树——SSRF(三)

目录 URL Bypass 数字IP Bypass 302跳转 Bypass DNS重绑定 Bypass SSRF绕过方法&#xff1a; &#xff08;1&#xff09; http://abc.com127.0.0.1 &#xff08;2&#xff09;添加端口号 http://127.0.0.1:8080 &#xff08;3&#xff09;短地址 htt…

LabVIEW和ZigBee无线温湿度监测

LabVIEW和ZigBee无线温湿度监测 随着物联网技术的迅速发展&#xff0c;温湿度数据的远程无线监测在农业大棚、仓库和其他需环境控制的场所变得日益重要。开发了一种基于LabVIEW和ZigBee技术的多区域无线温湿度监测系统。系统通过DHT11传感器收集温湿度数据&#xff0c;利用Zig…

攻防世界-mobile-easy-app详解

序言 这道题网上很多分析&#xff0c;但是分析的都是arm版本的&#xff0c;我选了arm64的来分析&#xff0c;arm64相比arm难度高一些&#xff0c;因为arm64编译器搞了inline优化&#xff0c;看起来略抽象 分析 这道题逻辑很简单&#xff0c;输入flag然后一个check函数验证&a…

Python 造数据神器Faker

大家好&#xff0c;在编写代码过程中&#xff0c;我们经常需要一些假数据来进行测试或者演示。手动创建这些数据不仅耗时&#xff0c;而且容易出错。幸运的是&#xff0c;Python有一个非常有用的库叫做Faker&#xff0c;它可以生成各种类型的假数据&#xff0c;从名字、地址到公…

学习图形推理

学习图形推理 1.位置规律1.1平移1.2翻转、旋转2.样式规律2.1加减异同2.2黑白运算3.属性规律3.1对称性3.2曲直性3.3开闭性4.数量规律4.1面4.2线数量4.3笔画数4.4点数量4.5素数量5.空间重构5.1相对面5.2相邻面-公共边5.3相邻面-公共点5.4相邻面-画边法题型 一组图:从左往右找规律…

在代码中集成sentry项目

创建团队和项目 选择项目进入设置 选择错误跟踪选择对应的项目类型 根据配置和测试信息配置sentry项目到代码中并测试

如何用VSCode debug Python文件

诸神缄默不语-个人CSDN博文目录 需求&#xff1a;我其实一般都用print大法来“调试”程序&#xff0c;但是有时对于机械性比较强但是又有些复杂的程序&#xff0c;还是debug比较方便。 debug功能我之前用过NetBeans和eclipse&#xff0c;应该可以明显看出来我是Java转Python党…

虚拟ECU:彻底改变汽车软件开发与测试

汽车开发领域有着垂直性较强的一系列需求&#xff0c;其中最为瞩目的需求之一就是对安全高效的软件测试方法的需求。传统的汽车开发偏向使用硬件原型与真实ECU进行软件测试&#xff0c;但由于硬件设备往往在开发周期的中后阶段才生产完成&#xff0c;给汽车开发带来了成本与时间…

微软刚发布的Copilot+PC为什么让Intel和AMD尴尬?2024 AI PC元年——产业布局及前景展望

美国东部时间5月20日在微软位于华盛顿的新园区举行的发布会上&#xff0c;宣布将旗下AI助手Copilot全面融入Windows系统&#xff0c;能够在不调用云数据中心的情况下处理更多人工智能任务。 “将世界作为一个提示词就从Windows系统开始”。微软的新PC将是“CopilotPC”&#xf…

【SQL】外连接 LEFT JOIN

目录 一.内连接与外连接 1.内连接&#xff08;inner join&#xff09; 2.外连接&#xff08;outer join&#xff09; 二.两表连接 1.我们先来试试看内连接&#xff1a; 2.我们再来试试外连接 三.单表外连接 四.总结 一.内连接与外连接 先得介绍内连接和外连接两个概念&…

esp32(8266)如何在platformio中上传文件到单片机

本来认为这是基础内容&#xff0c;不用我来介绍&#xff0c;结果&#xff0c;在个人的单片机字库开源项目 GitHub - StarCompute/tftziku: 这是一个通过单片机在各种屏幕上显示中文的解决方案 中有两个人问到了&#xff0c;就特别来说明一下&#xff1a; 在platformio中新建一…

音视频开发7 音视频转换格式流程

先看条转换视频文件的命令 我们的目的是将 源文件 source_1920x1080.mp4 转换成 目标文件 dest_1280x720.flv ffmpeg -i source_1920x1080.mp4 -acodec copy -vcodec libx264 -s 1280x720 dest_1280x720.flv -acodec copy 的意思是&#xff0c;目标的 音频格式 使用和 源文…

vue 引入 emoji 表情包

vue 引入 emoji 表情包 一、安装二、组件内使用 一、安装 npm install --save emoji-mart-vue二、组件内使用 import { Picker } from "emoji-mart-vue"; //引入组件<picker :include"[people,Smileys]" :showSearch"false" :showPreview&q…

操作系统中的内存管理

虚拟内存 操作系统会提供一种机制&#xff0c;将不同进程的虚拟地址和不同内存的物理地址映射起来。如果程序要访问虚拟地址的时候&#xff0c;由操作系统转换成不同的物理地址&#xff0c;这样不同的进程运行的时候&#xff0c;写入的是不同的物理地址&#xff0c;这样就不会冲…

【JavaEE进阶】——Spring Web MVC (响应)

目录 &#x1f6a9;学习Spring MVC &#x1f388;返回静态网页 &#x1f388;返回数据ResponseBody &#x1f388;返回html代码片段 &#x1f388;返回JSON &#x1f388;设置状态码 &#x1f388;设置Header &#x1f6a9;学习Spring MVC 既然是 Web 框架, 那么当⽤⼾在…

ORA-01012: not logged on

问题描述 明明已经shutdown immediate一致性关库&#xff0c;但是查进程时发现oracle进程依然存在。sqlplus / as sysdba登录提示ORA-01012: not logged on报错&#xff0c;着重强调&#xff0c;服务器上就一个实例。 分析过程 查看进程 我通常会在shutdown immediate之后查…

黄石首家Pearson VUE国际认证考试中心落户湖北理工学院

Pearson VUE 作为 Pearson 集团的专门从事计算机化考试服务的公司&#xff0c;到目前为止&#xff0c;已在全世界165 个国家授权了 4400 多个考试中心以及超过 230 家 PVUE 自有考试中心&#xff0c;其中在中国的有三百多个授权考点和 4 个自有考试中心。Pearson VUE 以其技术和…

Python模块、包和异常处理

大家好&#xff0c;在当今软件开发领域&#xff0c;Python作为一种简洁、易读且功能强大的编程语言&#xff0c;被广泛应用于各种领域。作为一名测试开发工程师&#xff0c;熟练掌握Python的模块、包和异常处理是提高代码可维护性和错误处理能力的关键。本文将和大家一起探讨Py…