Unity-观察者模式(异步问题)

事件分发机制-解决异步问题

//==========================
// - FileName:      EventManager.cs         
// - Created:       true.	
// - CreateTime:    2020/04/02 22:15:11	
// - Email:         1670328571@qq.com		
// - Region:        China WUHAN	
// - Description:   机制管理系统、同时带有异步处理的方法
//==========================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

/// <summary>
/// 消息机制
/// 1.同模块上下级之间进行访问,可用可不用,老师推荐不用。消息机制的一个特点是谁订阅,谁会收到消息
/// 没有订阅就不会,如果我们代码开发内容很多很复杂,那么我们后期维护不方便查找相关引用。
/// 2.跨模块访问调用管理者相关方法,可用可不用,推荐不用。因为GameManager里提供了必要的外部可访问
/// 接口方法,直接调用管理里边的方法就可以了。封装的很好,访问者不需要去认识除了GameManager以外的对象
/// 3.跨模块同级或者下层级之间互相调用,要使用。防止耦合性太高。
/// </summary>
public class EventManager
{
    private Dictionary<string, Action<object>> mRegisterMsgs;
    public EventManager()
    {
        mRegisterMsgs = new Dictionary<string, Action<object>>();
    }

    public void Register(string msgName, Action<object> onMsgReceived)
    {
        //if (!mRegisterMsgs.ContainsKey(msgName))
        //{
        //    mRegisterMsgs.Add(msgName,onMsgReceived);
        //}
        //else
        //{
        //    mRegisterMsgs[msgName] += onMsgReceived;
        //}
        if (!mRegisterMsgs.ContainsKey(msgName))
        {
            mRegisterMsgs.Add(msgName, _ => { });
        }
        mRegisterMsgs[msgName] += onMsgReceived;
    }

    public void UnRegister(string msgName, Action<object> onMsgReceived)
    {
        if (mRegisterMsgs.ContainsKey(msgName))
        {
            mRegisterMsgs[msgName] -= onMsgReceived;
        }
    }

    public void Send(string msgName, object data)
    {
        if (mRegisterMsgs.ContainsKey(msgName))
        {
            mRegisterMsgs[msgName](data);
        }
    }
}

#region 特异性消息管理
public struct TalkPanelMsg
{
    public string[] talks;
    public bool[] talkOrder;
    public bool captionBetrayal;
    public int enterGame;
}

public struct TalkIndexMsg
{
    public bool ifAdd;
    public int addCount;
}
#endregion



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值