项目框架——消息分发系统【MessageManager】

        首先这个消息分发系统是一个继承于Mono单例模式的,所以他也是一个单例内容,使用起来很简单,只需要知道以下几点即可。

        第一,单例记得添加;

        第二,添加消息监听;

        第三,分发消息;

        一共就这三个内容,第一点没有什么好说的,单例模式,添加在场景当中就好了,关于单例模式的内容,可以参考【项目框架——单例模式】进行详细的了解。主要是接下来的第二和第三点。

        添加消息监听之前,我们来看看消息监听函数类。

        ImessageEventListener,这个就是我们消息监听类的虚基类,里面标识了类是否还存在意义,类是否允许管理类进行清理,处理消息和在同级消息当中的优先级。

        ImessageBase,看见base基本就明白了,这个是框架里面预制了一种消息监听类,新增了回调函数,拥有对象以及是否可以清理三个内容。

        知道了上面这两个内容,对于添加消息监听的理解就简单多了,无非就是两种类型,一种是使用框架内置的消息监听类进行监听,这个时候我们需要的参数仅仅是一个回调而已,当然,其他的参数也是需要的,另外一种就是使用新的消息监听类进行添加监听。

        最后就是分发消息。

        分发消息其实没有什么内容,主要是调用分发消息的接口即可。值得提一下的是Unity内置分发和其他线程分发。

        内置的分发没有什么问题,他运行于unity Update当中,没有同步的问题,都是直接分发出去的。

        其他线程分发就不同了,他使用了线程锁,而且参数也变了,当我们使用线程分发时,参数不再是变长的,而是固定参数长度为一,但是监听方法上依然写的是变长的,这个没有变,只不过针对于方法的处理上有所不同,线程分发的变长是在第一个参数上进行的变长参数,也就是object里面封装了一个变长的object[]。

        举例:

        CS.Game.Engine.LuaManager.Instance:SendMessageToThread("SET_DIREN_PARENT",diren,zidan,ziji, "3",b1,b2,b3,"-850","1500","1",fenzhi);

        这个方法是在lua文件里面发送的,他的实际调用方法就是调用了线程分发机制,他最终的处理方法是在一个UI上,代码如下:

 /// <summary>

/// 设置敌人

/// </summary>

/// <param name="arms"></param>

private void SetDiRenParent(params object[] vs)

{

    List<System.Object> arms = vs[0] as List<System.Object>;

 

    GameObject go = arms[0] as GameObject;

    m_DiRen = go.transform;

 

    GameObject g = arms[1] as GameObject;

    m_ZiDan = g.transform;

 

    m_Self = arms[2] as GameObject;

    int cout = int.Parse(arms[3] as string);

    m_Bgs = new RectTransform[cout];

    int index = 4;

    for (int i = 0; i < cout; i++)

    {

        m_Bgs[i] = (arms[index++] as GameObject).GetComponent<RectTransform>();

    }

 

    m_Limit = float.Parse(arms[index++] as string);

    m_MaxLimit = float.Parse(arms[index++] as string);

    m_TempY = float.Parse(arms[index++] as string);

    GameObject fen = arms[index] as GameObject;

    m_ShowFenZhi = fen.GetComponent<Text>();

}

        有的小伙伴可能看到了,其实lua里面调用的并不是消息单例,没有关系,主要是框架当中不想导出太多接口类到lua当中,所以在lua管理单例类当中写了个消息分发的接口而已。

 

项目GitHub地址

https://github.com/FengFaming/ClientEngine

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值