Unity framework learning _EventManager, gestión de eventos simple, fácil de realizar el sistema global de eventos

                     Unity framework learning_EventManager Gestión de eventos simple para realizar fácilmente un sistema de eventos global


Tabla de contenido

1. Introducción a la publicación del blog

2. Contenido

(1) Declarar encomendar

(2) Definir método de miembro

(3) Mejorando el método

(4) Usar demostración

3. Empuje

4. Conclusión


1. Introducción a la publicación del blog

       Este blogger implementa un sistema de eventos simple, que puede registrar y llamar eventos globales fácilmente. Originalmente, el blogger quería implementar un método con cualquier parámetro o cualquier valor de retorno, y podía registrarse directamente a través del nombre del método. Un sistema de eventos que resuelve automáticamente lo, pero su capacidad es limitada. Finalmente, no lo escribí cuando quería romperme la cabeza. Solo podía hacerlo así.


2. Contenido

(1) Declarar encomendar

public delegate void EventMgr(params object[] param);

       Aquí declaramos un delegado según sea necesario, porque los parámetros pueden ser un número no fijo, por lo que el modificador params se usa aquí para representar un número indefinido de parámetros.

(2) Definir método de miembro

public interface IEventMgr
{
    void Register(int key, EventMgr eventMgr);//注册事件

    void UnRegister(int key);//解绑事件

    void ClearAll();//解绑所有事件

    bool IsRegisterName(int key);//key值是否被注册

    bool IsRegisterFunc(EventMgr eventMgr);//eventMgr是否被注册

    void Invoke(int key, params object[] param);//调用
}

Aquí escribimos una interfaz para definir los métodos que necesitamos usar.

(3) Mejorando el método

    /// <summary>
    /// 存储注册好的事件
    /// </summary>
    protected readonly Dictionary<int,EventMgr> EventListerDict = new Dictionary<int, EventMgr>();

Diccionario de declaración : este diccionario almacena todos nuestros eventos registrados y sus valores clave correspondientes

    /// <summary>
    /// 是否暂停所有的事件
    /// </summary>
    public bool IsPause = false;

Declare el valor bool : IsPause se usa para suspender todas las llamadas a eventos

    public void Register(int key, EventMgr eventMgr)
    {
        if (EventListerDict.ContainsKey(key))
        {
            Debug.LogError("Key:"+key +"已存在!");
        }
        else
        {
            EventListerDict.Add(key,eventMgr);
        }
    }

Registrar evento : Agregamos el delegado eventMgr vinculado con el método y su clave correspondiente al diccionario.

    public void UnRegister(int key)
    {
        if (EventListerDict!=null&&EventListerDict.ContainsKey(key))
        {
            EventListerDict.Remove(key);
            Debug.Log("移除事件:"+key);
        }
        else
        {
            Debug.LogError("Key:"+key +"不存在!");
        }
    }

Desvincular evento : eliminar el evento registrado del diccionario

    public  void ClearAll()
    {
        if (EventListerDict!=null)
        {
            EventListerDict.Clear();
            Debug.Log("清空注册事件!");
        }
    }

Eventos claros : desvincula todos los eventos,

   public bool IsRegisterName(int key)
    {
        if (EventListerDict!=null&&EventListerDict.ContainsKey(key))
        {
            EventListerDict.Remove(key);
            Debug.Log("事件:"+key +"已注册!");
            return true;
        }
        Debug.Log("事件:"+key +"未注册!");
        return false;
    }

Determine si el valor de la clave se ha registrado: determine si el valor de la clave se ha registrado y devuelva el valor bool

    public bool IsRegisterFunc(EventMgr eventMgr)
    {
        if (EventListerDict!=null&&EventListerDict.ContainsValue(eventMgr))
        {
            Debug.Log("事件已注册!");
            return true;
        }
        Debug.Log("事件未注册!");
        return false;
    }

Determine si el método se ha registrado : determine si eventMgr se ha registrado y devuelva el valor bool

    public void Invoke(int key,params object[] param)
    {
        if (!IsPause)
        {
            if (EventListerDict.ContainsKey(key))
            {
                EventListerDict[key].Invoke(param);
            }
            else
            {
                Debug.LogError("事件:"+key +"未注册!");
            }
        }
        else
        {
            Debug.LogError("所有事件已暂停!"); 
        }
    }

Evento de llamada : evento de llamada por valor de clave, puede pasar un número indefinido de parámetros

(4) Usar demostración

    //被调用方法
    public void TestFunc(params object[] param)
    {
	for (int i = 0; i < param.Length; i++)
	{
	    print(param[i]);
	}
    }
    
    //注册事件 key值为1
    EventManager.Instance.Register(1,TestFunc);

    //调用key为1的事件 传入参数 1 和 “abc”
    EventManager.Instance.Invoke(1,1,"abc");

3. Empuje

Código fuente del proyecto: https://github.com/KingSun5/Study_EventManager


4. Conclusión

       El método de implementación es muy simple. El blogger continuará complementando y mejorando en el seguimiento. Si cree que el artículo del blogger está bien escrito, es posible que desee prestar atención al blogger y dar me gusta a la publicación del blog. Además, el blogger tiene capacidad limitada Si hay algún error en el artículo Cualquier comentario o crítica es bienvenida.

       Grupo de intercambio QQ: 806091680 (Chinar)

       Este grupo fue creado por el blogger de CSDN Chinar, ¡lo recomiendo! ¡Yo también estoy en el grupo!

       Este artículo es un artículo original, por favor vuelva a imprimir la fuente del famoso autor y manténgase en la parte superior. ! ! !

Supongo que te gusta

Origin blog.csdn.net/Mr_Sun88/article/details/93144102
Recomendado
Clasificación