尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Unity简易事件分发器

Unity简易事件分发器
📅 发布时间:2026/6/19 4:38:12

一、EventFunction

using System;
namespace EventCore
{public struct EventFunction{public object _caller;public Action _action;}public struct EventFunction<T>{public object _caller;public Action<T> _action;}
}

二、Event<T>

using System;
using System.Collections.Generic;
using UnityEngine;namespace EventCore
{public class Event<T>{private readonly List<EventFunction<T>> _event = new List<EventFunction<T>>();public void AddListener(object caller, Action<T> action){if (action != null){for (int index = 0, max = _event.Count; index < max; index++){var element = _event[index];if (element._caller == caller && element._action == action){Debug.LogError("EventGeneric,重复添加事件:" + element._caller + "," + element._action.Method);return;}}}_event.Add(new EventFunction<T> { _caller = caller, _action = action });}public void RemoveListener(object caller, Action<T> action){for (int index = _event.Count - 1; index >= 0; index--){var element = _event[index];if (element._caller == caller && element._action == action){_event.RemoveAt(index);return;}}}public void Trigger(T data){for (int index = _event.Count - 1; index >= 0; index--){var element = _event[index];if (element._action != null){element._action(data);}else{Debug.LogError("EventGeneric: event removed");}}}}
}

三、Event

using System;
using System.Collections.Generic;
using UnityEngine;namespace EventCore
{public class Event{private readonly List<EventFunction> _event = new List<EventFunction>();public void AddListener(object caller, Action action){if (action != null){for (int index = 0, max = _event.Count; index < max; index++){var element = _event[index];if (element._caller == caller && element._action == action){Debug.LogError("EventGeneric,重复添加事件:" + element._caller + "," + element._action.Method);return;}}}_event.Add(new EventFunction { _caller = caller, _action = action });}public void RemoveListener(object caller, Action action){for (int index = _event.Count - 1; index >= 0; index--){var element = _event[index];if (element._caller == caller && element._action == action){_event.RemoveAt(index);return;}}}public void Trigger(){for (int index = _event.Count - 1; index >= 0; index--){var element = _event[index];if (element._action != null){element._action();}else{Debug.LogError("EventGeneric: event removed");}}}}
}

四、使用分发器

事件定义:

using EventCore;public class TestEvent
{public static Event<int> TestEvent1 = new Event<int>(); // 事件测试public static Event TestEvent2 = new Event(); // 事件测试
}

事件注册、事件注销:

TestEvent.TestEvent2.AddListener(this, OnTestEvent);
TestEvent.TestEvent2.RemoveListener(this, OnTestEvent);private void OnTestEvent()
{}

事件触发:

TestEvent.TestEvent2.Trigger();

相关新闻

  • 题解:P12410 「知りたくなかった、失うのなら」
  • 《咳咳,未来编程大师,顶尖程序员的第一条博客》
  • 【任务】自然语言处理——情感分析 <上>

最新新闻

  • HugeJsonViewer:打破GB级JSON文件查看的性能瓶颈
  • 2026年优秀的中粮长城葡萄酒潍坊总代理/中粮直营店长城葡萄酒潍坊总代理/原厂直供长城葡萄酒潍坊总代理选哪家靠谱 - 行业平台推荐
  • 3分钟解锁网易云音乐:免费音频解密转换全攻略
  • 深度学习模型YOLO模型如何训练中国输电线路绝缘子数据集 CPLID(YOLO 目标检测)
  • SPI EEPROM 25A512硬件保护与驱动优化实战指南
  • 2026年评价高的黄山卫生间下水道疏通/黄山下水道上门疏通/下水道上门疏通哪家好 - 行业平台推荐

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号