Timeline

news2024/11/16 17:56:28

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信号和轨道

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3100点失守,小丑竟是我自己

敏感时刻&#xff0c;亮剑的我们股市买单&#xff0c;海的那边反倒还涨了&#xff0c;好生气啊&#xff01;就连我们胡主编昨晚都气得睡不着&#xff0c;一点多了还在那抒发情感&#xff0c; 确实&#xff0c;有句话说到心窝里了&#xff1a;小散们是拿真金白银撑场子的&#x…

微星打造全球首款DDR5 CAMM2内存主板:这下清爽了

微星预告了新款主板“ Z790 Project Zero Plus”&#xff0c;这也是 全球第一款配备DDR5 CAMM2内存的桌面主板&#xff01; CAMM全称为“Compression Attached Memory Module”&#xff0c;已被JEDEC组织接纳为行业标准&#xff0c;相比传统的SO-DIMM、DIMM内存最大特点就是取消…

大模型之Ollama:在本地机器上释放大型语言模型的强大功能

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

spark的简单学习一

一 RDD 1.1 RDD的概述 1.RDD&#xff08;Resilient Distributed Dataset&#xff0c;弹性分布式数据集&#xff09;是Apache Spark中的一个核心概念。它是Spark中用于表示不可变、可分区、里面的元素可并行计算的集合。RDD提供了一种高度受限的共享内存模型&#xff0c;即RD…

翻译《The Old New Thing》- Why do we even have the DefWindowProc function?

Why do we even have the DefWindowProc function? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20071105-00/?p24583 Raymond Chen 2007年11月05日 为什么一定要使用 DefWindowProc 函数&#xff1f; 简要 文章讨论了为什么我们有DefW…

day15|各种遍历的应用

相关题目&#xff1a; 层次遍历会一打十 反转二叉树 对称二叉树 层次遍历会一打十 自底向上的层序遍历 实现思路&#xff1a;层次遍历二叉树&#xff0c;将遍历后的结果revers即可 public List<List<Integer>> levelOrderBottom(TreeNode root) {List<List&l…

Flutter 页面布局 Flex Expanded弹性布局

题记 —— 执剑天涯&#xff0c;从你的点滴积累开始&#xff0c;所及之处&#xff0c;必精益求精&#xff0c;即是折腾每一天。 什么是弹性布局&#xff08;Flex&#xff09;&#xff1f; 弹性布局&#xff08;Flex&#xff09;是一种基于弹性盒子模型的布局方式&#xff0c;类…

IP地址显示“不安全”怎么办|已解决

解决IP地址显示“不安全”的问题&#xff0c;通常需要确保网站或服务使用HTTPS协议进行加密通信&#xff0c;可以通过部署SSL证书来解决&#xff0c;以下是具体的解决步骤&#xff1a; 1 申请IP地址SSL证书&#xff1a;网站管理员应向证书颁发机构&#xff08;CA&#xff09;申…

【教学类-58-03】黑白三角拼图03(4*4宫格)总数算不出+随机抽取10张

背景需求&#xff1a; 【教学类-58-01】黑白三角拼图01&#xff08;2*2宫格&#xff09;256种-CSDN博客文章浏览阅读318次&#xff0c;点赞10次&#xff0c;收藏12次。【教学类-58-01】黑白三角拼图01&#xff08;2*2宫格&#xff09;256种https://blog.csdn.net/reasonsummer/…

联邦BGP

AR1&#xff1a; [Huawei]bgp 1 [Huawei-bgp]router-id 1.1.1.1 [Huawei-bgp]peer 12.1.1.2 as-number 2 [Huawei-bgp]network 10.1.1.1 24---宣告 AR8&#xff1a; [Huawei]bgp 3 [Huawei-bgp]router-id 8.8.8.8 [Huawei-bgp]peer 78.1.1.7 as-number 2 [Huawei-bgp]ne…

剖析镜面不锈钢氮气柜的种类和使用维护方法

镜面不锈钢氮气柜是一种高端的储存设备&#xff0c;专门设计用于保存对环境条件有严格要求的敏感物品。它采用了高品质的不锈钢材料&#xff0c;并通过精细的抛光处理达到镜面效果&#xff0c;不仅美观而且具备优秀的耐腐蚀性和易清洁性。柜体内利用氮气控制系统&#xff0c;通…

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…

内网安全之证书服务基础知识

PKI公钥基础设施 PKI(Public Key Infrastructure)公钥基础设施&#xff0c;是提供公钥加密和数字签名服务的系统或平台&#xff0c;是一个包括硬件、软件、人员、策略和规程的集合&#xff0c;用来实现基于公钥密码体制的密钥和证书的产生、管理、存储、分发和撤销等功能。企业…

c【语言】了解指针,爱上指针(4)

了解指针&#xff0c;爱上指针&#xff08;4&#xff09; 字符指针变量数组指针变量二维数组传参的本质函数指针变量typedef关键字函数指针数组转移表 字符指针变量 如整型指针变量一样&#xff0c;它是指针变量的其中一个类型&#xff1a;char* 一般&#xff0c;我们是这样使…

通胀担忧仍存,美联储降息预期或又推迟

KlipC报道&#xff1a;周三&#xff0c;美联储公布4月30日至5月1日政策会议纪要&#xff0c;会议纪要显示美联储对通胀仍感到担忧&#xff0c;将更长时间维持利率不变&#xff0c;必要时进一步收紧政策。 尽管在前不久公布的4月CPI数据显示通胀有所缓解&#xff0c;但是被认为…

网站如何建设

#### 环境准备 - 安装Java Development Kit (JDK)&#xff1a;这是Java开发的基础&#xff0c;用于编译Java源代码。 - 安装Web服务器&#xff1a;常用的有Tomcat、Jetty、GlassFish或JBoss。它们负责将Java应用程序部署到Web上&#xff0c;并处理来自客户端的请求。 - 安装…

flutter开发实战-美颜前后对比图效果实现

flutter开发实战-美颜前后对比图效果实现 最近使用代码中遇到了图片前后对比&#xff0c;这里使用的是CustomClipper来实现 一、CustomClipper 我们实现CustomClipper子类来实现美颜后的图片裁剪功能 getClip()是用于获取剪裁区域的接口&#xff0c;由于图片大小是6060&am…

一张SSL证书如何同时保护多个域名及其子域名?

在互联网时代&#xff0c;数据安全和隐私保护变得至关重要&#xff0c;而SSL证书作为确保网站安全的重要工具&#xff0c;其重要性不言而喻。本文将详细探讨一种特殊的SSL证书——多域名通配符SSL证书&#xff0c;它为网站管理员提供了一种高效、经济的方式来保护多个域名及其子…

第一后裔加速器推荐 第一后裔免费加速器用哪个

知名游戏开发商NEXON对于许多老玩家来说都不会陌生&#xff0c;它旗下的泡泡堂和DNF可谓是一代人的青春。就在最近NEXON又为玩家们带来了最新作品《第一后裔》&#xff0c;该款游戏为搭建在虚幻5引擎上的一款多人联机射击掉宝类游戏&#xff0c;一上线就受到了许多游戏玩家的关…

高速公路定向广播(声光一体) HT-600D

1、产品概述&#xff1a; HT-600D声光一体平面波IP定向广播是北京恒星科通创新性研发产品&#xff0c;采用公司自主研发的平面波传声技术&#xff0c;该产品具有高声压、强指向性、高清晰度等特点&#xff0c;采用定向声传声技术将声音聚集到正前方定向传输,周边声压级明显降低…