U3D框架搭建之消息系统(前端通信)

毕业快两年了,努力工作,像坐火箭似的提升了半年多,也浮躁了半年多。这半年多来基本处于迷茫期,可能是因为刚毕业的半年提升速度太快,而现在基本没什么提升,前后反差太大,而导致的一种恐慌吧。和很多前辈聊过,后来也不停的看帖子,试图寻找类似的经历以及度过这段“瓶颈期”的方法。后来静下心来总结了一下,发现,不是现在提升太慢,是现在心里太浮躁,看什么都静不下心来,很多看似很难的东西不愿意自己去尝试,去突破自己。

废话了半天,从今天开始就踏踏实实踏出第一步吧。

回想起之前手游项目的前端框架功能,自己也尝试着构建一些前端的框架吧。

前端的消息系统,即前端自己的通讯机制,方便前端开发人员实现对象间的数据传递。

为什么前端需要进行对象间的数据传递呢?(讲到这就太基础了。。懂得同学不要吐槽。。因为我自己找资料看东西的时候碰到一些略过基础讲解的,看的会不太明白,这样讲对一些刚接触的同学是好事儿吧)

举个很简单的栗子。前端收到玩家角色面板的一个数据时(比如玩家升级了,面板上的等级数字需要改变)。这时候,接收服务器数据的方法肯定在相关的消息类里,开发人员需要通过这个类,把数据传递给角色面板。(如果你把接收数据的方法放在面板里,当你升级的时候,面板是关着的话,升级不就失败了?)这里就就涉及到一个模式,观察者模式(不了解的同学自行百度,但是建议看完下面的代码再看这个设计模式)。

这样,结构就很清晰了,在接收服务器的类里完成数据的处理,然后发消息给角色面板,如果面板是关着的,当然就接收不到发来的数据了。当面板是开着的,因为面板已经注册为该消息的观察者了,所以会收到数据更新,从而对面板上的显示进行相关的更新。

下面贴出前端消息功能的框架代码:

using UnityEngine;
using System.Collections.Generic;

public class MsgController
{
    private static MsgController instance;

    public delegate void EventHandler(Message message);
    private Dictionary
   
   
    
    > msgDic;

    private MsgController()
    {
        msgDic = new Dictionary
    
    
     
     >();
    }

    public static MsgController GetInstance()
    {
        if (instance == null)
        {
            instance = new MsgController();
        }
        return instance;
    }

    public void AddListener(string msgName, EventHandler eventHandler)
    {
        if (msgDic.ContainsKey(msgName))
        {
            msgDic[msgName].Add(eventHandler);
        }
        else
        {
            List
     
     
      
       list = new List
      
      
       
       ();
            list.Add(eventHandler);
            msgDic.Add(msgName, list);
        }
    }

    public void RemoveListener(string msgName)
    {
        if (msgDic.ContainsKey(msgName))
        {
            msgDic[msgName].Clear();
            msgDic.Remove(msgName);
        }
    }

    public void SendMsg(string msgName, Message msg)
    {
        if (msgDic.ContainsKey(msgName))
        {
            foreach(EventHandler handler in msgDic[msgName])
            {
                handler(msg);
            }
        }
    }
}

      
      
     
     
    
    
   
   
代码很简单,我们通过一个string类型来把某个对象注册为某个消息的观察者,当然,这个消息的观察者可以是N个。然后通过委托,在send消息的时候,实现对应方法的调用。

Message是个自定义的类。用来装载一些通讯常用的数据,比如发送者,消息体之类的。

第一次老老实实自己写一篇博客,膜拜一下那些指引过我的博客大神。

因为自己也是边研究边写,更新不会很快吧。虽然慢,但这何尝不是磨自己性子的过程呢。这种记录自己所得,又可以帮助到别人的好事儿,何乐不为呢。希望可以坚持下去吧。希望自己可以把我住这段时间,踏踏实实的学好自己需要的,早日完成自己的目标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值