unity一套简单的事件系统

这篇博客介绍了如何在Unity3D中创建一个简单的事件系统,包括源码展示和基于类型模板系统的应用实例。
摘要由CSDN通过智能技术生成

1.源码

代码如下(示例):

using System;
using System.Collections.Generic;

    /// <summary>
    /// 简单的事件系统
    /// </summary>
    public class EventSystemSimple
    {
   
        public delegate void Handler(object obj);

        private static Dictionary<string, Handler> _Events = new Dictionary<string, Handler>();

        public static void Register(string key, Handler handler)
        {
   
            Handler h = null;

            if (_Events.TryGetValue(key, out h))
            {
   
                h += handler;
            }
            else
            {
   
                _Events.Add(key, handler);
            }
        }

        public static void UnRegister(string key, Handler handler)
        {
   
            Handler h = null;

            if (_Events.TryGetValue(key, out h))
            {
   
                h -= handler;
                if (h == null)
                {
   
                    _Events.Remove(key);
                }
            }
        }

        public static void Broadcast(string key, object obj)
        {
   
            Handler h = null;

            if (_Events.TryGetValue(key, out h))
            {
   
                h(obj);
            }
        }
    }


    /// <summary>
    /// 基于模板的事件系统
    /// </summary>
    public class EventSystemT
    {
   
        // 定义代理类
        public delegate void Handler();
        public delegate void Handler<T>(T arg);
        public delegate void Handler<T, X>(T arg1, X arg2);

        // 事件集合
        private static Dictionary<string, Delegate> _Events = new Dictionary<string, Delegate>();

        // 1个参数
        public static void Register(string key, Handler handler)
        {
   
            Delegate h = null;

            if (_Events.TryGetValue(key, out h))
            {
   
                if (h.GetType() == handler.GetType())
                {
   
                    h = (Handler)h + handler;
                }
                else
                {
   
                    throw new Exception(string.Format("添加监听错误:事件{0}的委托类型{1}与添加的委托类型{2}不同!", key, h.GetType(), handler.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值