unity事件处理

方法调用

//发送事件 【发送事件码,发送消息内容】 
EventCenterUtil.Broadcast(EventCenterUtil.EventType.Joystick, ui);//监听无参事件
EventCenterUtil.AddListener(EventCenterUtil.EventType.Joystick, show);
public void show(){}//发送事件 有参事件
EventCenterUtil.Broadcast(EventCenterUtil.EventType.Joystick, ui, "你好");EventCenterUtil.AddListener<int>(EventCenterUtil.EventType.Joystick, show);public void show(string i){ }

unity工具类

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using static Unity.VisualScripting.FlowStateWidget;
public class EventCenterUtil
{public enum EventType{Joystick}public delegate void CallBack();public delegate void CallBack<T>(T arg);public delegate void CallBack<T,X>(T arg1, X arg2);private static Dictionary<EventType, Delegate> m_EventTable = new Dictionary<EventType, Delegate>();/*** 添加监听* **/public static void AddListener(EventType eventType, CallBack callBack){if (!m_EventTable.ContainsKey(eventType)){m_EventTable.Add(eventType, null);}Delegate d = m_EventTable[eventType];if (d != null && d.GetType() != callBack.GetType()){throw new Exception(string.Format("尝试为事件{0}添加不同类型的委托,当前事件所对应的委托是{1}," +"要添加的委托类型为{2}", eventType, d.GetType(), callBack.GetType()));}m_EventTable[eventType] = (CallBack)m_EventTable[eventType] + callBack;}public static void AddListener<T>(EventType eventType, CallBack<T> callBack){if (!m_EventTable.ContainsKey(eventType)){m_EventTable.Add(eventType, null);}Delegate d = m_EventTable[eventType];if (d != null && d.GetType() != callBack.GetType()){throw new Exception(string.Format("尝试为事件{0}添加不同类型的委托,当前事件所对应的委托是{1}," +"要添加的委托类型为{2}", eventType, d.GetType(), callBack.GetType()));}m_EventTable[eventType] = (CallBack<T>)m_EventTable[eventType] + callBack;}public static void AddListener<T,X>(EventType eventType, CallBack<T, X> callBack){if (!m_EventTable.ContainsKey(eventType)){m_EventTable.Add(eventType, null);}Delegate d = m_EventTable[eventType];if (d != null && d.GetType() != callBack.GetType()){throw new Exception(string.Format("尝试为事件{0}添加不同类型的委托,当前事件所对应的委托是{1}," +"要添加的委托类型为{2}", eventType, d.GetType(), callBack.GetType()));}m_EventTable[eventType] = (CallBack<T, X>)m_EventTable[eventType] + callBack;}/*** 移除监听* **/public static void RemoveListener(EventType eventType, CallBack callBack){if (m_EventTable.ContainsKey(eventType)){Delegate d = m_EventTable[eventType];if (d == null){throw new Exception(string.Format("移除监听错误: 事件(0}没有对应的委托", eventType));}else if (d.GetType() != callBack.GetType()){throw new Exception(string.Format("移除监听错误: 尝试为事件{0}移除不同类型的委托,当前委托类型为{1},要移除的委托类型为{2}", eventType, d.GetType(), callBack.GetType()));}}else{throw new Exception(string.Format("移除监听错误: 没有事件码{0}", eventType));}m_EventTable[eventType] = (CallBack)m_EventTable[eventType] - callBack;}public static void RemoveListener<T,X>(EventType eventType, CallBack<T, X> callBack){if (m_EventTable.ContainsKey(eventType)){Delegate d = m_EventTable[eventType];if (d == null){throw new Exception(string.Format("移除监听错误: 事件(0}没有对应的委托", eventType));}else if (d.GetType() != callBack.GetType()){throw new Exception(string.Format("移除监听错误: 尝试为事件{0}移除不同类型的委托,当前委托类型为{1},要移除的委托类型为{2}", eventType, d.GetType(), callBack.GetType()));}}else{throw new Exception(string.Format("移除监听错误: 没有事件码{0}", eventType));}m_EventTable[eventType] = (CallBack<T,X>)m_EventTable[eventType] - callBack;}public static void RemoveListener<T, X>(EventType eventType, CallBack<T> callBack){if (m_EventTable.ContainsKey(eventType)){Delegate d = m_EventTable[eventType];if (d == null){throw new Exception(string.Format("移除监听错误: 事件(0}没有对应的委托", eventType));}else if (d.GetType() != callBack.GetType()){throw new Exception(string.Format("移除监听错误: 尝试为事件{0}移除不同类型的委托,当前委托类型为{1},要移除的委托类型为{2}", eventType, d.GetType(), callBack.GetType()));}}else{throw new Exception(string.Format("移除监听错误: 没有事件码{0}", eventType));}m_EventTable[eventType] = (CallBack<T>)m_EventTable[eventType] - callBack;}/*** 广播监听* **/public static void Broadcast(EventType eventType){Delegate d;if (m_EventTable.TryGetValue(eventType, out d)){CallBack callBack = d as CallBack;if (callBack != null){callBack();}else{throw new Exception(string.Format("广播事件错误: 事件{0}对应委托具有不同的类型", eventType));}}}public static void Broadcast<T>(EventType eventType, T arg){Delegate d;if (m_EventTable.TryGetValue(eventType, out d)){CallBack<T> callBack = d as CallBack<T>;if (callBack != null){callBack(arg);}else{throw new Exception(string.Format("广播事件错误: 事件{0}对应委托具有不同的类型", eventType));}}}public static void Broadcast<T,X>(EventType eventType, T arg1, X arg2){Delegate d;if (m_EventTable.TryGetValue(eventType, out d)){CallBack<T,X> callBack = d as CallBack<T,X>;if (callBack != null){callBack(arg1, arg2);}else{throw new Exception(string.Format("广播事件错误: 事件{0}对应委托具有不同的类型", eventType));}}}
}

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

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

相关文章

自然语言处理从入门到应用——LangChain:提示(Prompts)-[基础知识]

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 模型编程的新方法是使用提示&#xff08;Prompts&#xff09;。提示指的是模型的输入。这个输入通常由多个组件构成。PromptTemplate负责构建这个输入&#xff0c;LangChain提供了多个类和函数&#xff0c;使得构建和处…

快应用编译前如何统一替换字符串

假设你有一个需求&#xff0c;要把代码里的ad-button替换为div&#xff0c;因为是mi看ad-button不爽。 这还不简单么&#xff0c;webpack有那么多成熟的plugins和loaders&#xff0c;本身我对webpack也只是略知一二&#xff0c;随便一搜网上的解决方案&#xff0c; string-re…

发点实用的快捷键(mac

切换输入法&#xff1a;ctrlspace /ctrloptionspace&#xff08;更快捷 切换网页&#xff1a; shifttab 切换应用界面&#xff1a;alttab 关闭页面&#xff1a;altw 搜索&#xff1a;altspace 展示mac隐藏文件&#xff1a; Commangshift . (点) 以下是一些浏览器快捷键&am…

Windows磁盘清理

针对开发同学&#xff0c;磁盘不够用时&#xff0c;常见的需要清理的内容&#xff1a; 1、虚拟机镜像、Docker镜像等。 通常占用比较大的存储&#xff0c;一个实例从几个G到几十个G。 2、Maven本地仓库。 如果公司有私服&#xff0c;可以全部删掉重新依赖&#xff0c;否则不…

ArcGIS应用

ArcGIS产品线为用户提供一个可伸缩的&#xff0c;全面的GIS平台。ArcObjects包含了许多的可编程组件&#xff0c;从细粒度的对象&#xff08;例如单个的几何对象&#xff09;到粗粒度的对象&#xff08;例如与现有ArcMap文档交互的地图对象&#xff09;涉及面极广&#xff0c;这…

Spring优雅的在事务提交/回滚前后插入业务逻辑

业务背景 业务那边想要统计下我们这边每天注册商户成功和失败的数量&#xff0c;你看看怎么给他弄下这个功能 功能实现 TransactionSynchronizationManager.registerSynchronization&#xff0c;发现这是spring事务提供的注册回调接口的方法。 在事务注解方法中&#xff0c…

Flutter详解和代码实例

目录 1. Flutter 基础概念2. Flutter 核心架构3. Flutter 组件库4. Flutter 布局与渲染5. Flutter 网络请求6. Flutter 调试工具7.实例8.优缺点8.1 Flutter 框架的优点包括&#xff1a;8.2 Flutter 框架的缺点包括&#xff1a; Flutter 是一款由 Google 开发的跨平台移动应用开…

【嵌入式学习笔记】嵌入式入门1——GPIO

1.什么是GPIO General Purpose Input Output&#xff0c;即通用输入输出端口&#xff0c;简称GPIO&#xff0c;作用是负责采集外部器件的信息或者控制外部器件工作&#xff0c;即输入输出。 2.STM32 GPIO简介 2.1.GPIO特点 不同型号&#xff0c;IO口数量可能不一样&#x…

融合大数据、物联网和人工智能的智慧校园云平台源码 智慧学校源码

电子班牌系统用以展示各个班级的考勤信息、授课信息、精品课程、德育宣传、班级荣誉、校园电视台、考场信息、校园通知、班级风采&#xff0c;是智慧校园和智慧教室的对外呈现窗口&#xff0c;也是学校校园文化宣传和各种信息展示的重要载体。将大数据、物联网和人工智能等新兴…

1.2 eureka注册中心,完成服务注册

目录 环境搭建 搭建eureka服务 导入eureka服务端依赖 编写启动类&#xff0c;添加EnableEurekaServer注解 编写eureka配置文件 启动服务,访问eureka Euraka服务注册 创建了两个子模块 在模块里导入rureka客户端依赖 编写eureka配置文件 添加Services 环境搭建 创建父…

Moonbeam新增强大的互操作性功能至波卡生态

波卡上的领先多链开发平台Moonbeam发布适用于平行链间活动的新版本互操作性功能。最新的链更新Runtime 2401&#xff0c;是自Moonbeam上线后的最大更新&#xff0c;其中包括三个针对开发者于链上的里程碑式更新&#xff1a; 用于访问消息传递功能的预编译智能合约从其他波卡平…

Python批量将Excel内指定列的数据向上移动一行

本文介绍基于Python语言&#xff0c;针对一个文件夹下大量的Excel表格文件&#xff0c;对其中的每一个文件加以操作——将其中指定的若干列的数据部分都向上移动一行&#xff0c;并将所有操作完毕的Excel表格文件中的数据加以合并&#xff0c;生成一个新的Excel文件的方法。 首…

Qt应用开发(基础篇)——布局管理 Layout Management

目录 一、前言 二&#xff1a;相关类 三、水平、垂直、网格和表单布局 四、尺寸策略 一、前言 在实际项目开发中&#xff0c;经常需要使用到布局&#xff0c;让控件自动排列&#xff0c;不仅节省控件还易于管控。Qt布局系统提供了一种简单而强大的方式来自动布局小部件中的…

探究SAM和眼球追踪技术在自动医学图像分割的应用(2023+GazeSAM: What You See is What You Segment)

摘要&#xff1a; 本研究探讨眼动追踪技术与SAM的潜力&#xff0c;以设计一个协同的人机交互系统&#xff0c;自动化医学图像分割。提出了GazeSAM系统&#xff0c;使放射科医生能够在图像诊断过程中通过简单地查看感兴趣的区域来收集分割掩模。该系统跟踪放射科医生的眼球运动…

Acwing.873.欧拉函数

题目 给定n个正整数ai&#xff0c;请你求出每个数的欧拉函数。 输入格式 第一行包含整数n。 接下来n行&#xff0c;每行包含一个正整数ai。 输出格式 输出共n行&#xff0c;每行输出一个正整数an的欧拉函数。 数据范围 1 ≤n ≤100 1≤ai≤2* 109 输入样例: 3 3 6 8输…

企业服务器数据库中了_locked勒索病毒怎么解密,_勒索病毒简介与防护

网络技术的发展也为互联网安全带来了一定威胁&#xff0c;对于企业来说&#xff0c;数据安全是关系整个企业正常运行的基础&#xff0c;保护好计算机免受网络威胁的攻击成为大家的一致目标。不过&#xff0c;近期&#xff0c;我们收到很多企业的求助&#xff0c;企业的服务器数…

如何让python在手机上运行,python在手机上怎么运行

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python程序如何在手机上运行&#xff0c;如何让python在手机上运行&#xff0c;现在让我们一起来看看吧&#xff01; 在计算机语言的运用过程中PythonS60手机是经常被使用的计算机语言&#xff0c;以下的文章是介绍Pyth…

中间件面试题

Redis相关面试题 此题是xx位面试题 (1)Redis Cluster,在一个请求过来的时候,数据分布在哪个节点, 使用的是有哪些算法? redis cluster 用不同的算法,就决定了数据如何分布到这些节点上去。 hash算法一致性hash算法hash slot算法(2)Redis为什么是高性能的? 基于内存…

流控平台Sentinel搭建和接入教程

流量控制和限流是大型系统必不可少的组成部分&#xff0c;Sentinel是Alibaba提供的一款特别好用的专业工具&#xff0c;属于那种看起来很牛&#xff0c;用起来也很牛的工具&#xff0c;下面记录一下接入的过程。 一&#xff0c;搭建平台 1&#xff0c;下载jar包 地址&#x…

2023-08-01力扣每日一题

链接&#xff1a; 2681. 英雄的力量 题意&#xff1a; 对于一个序列可以得到一个值max^2 * min&#xff0c;求一个数组的所有子序列数值和 解&#xff1a; 快速幂和慢速乘暴力 TLE(2558 / 2584) 首先对于这个数组来说&#xff0c;求值只依靠序列的最大值和最小值&#xf…