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

来源:互联网 发布:西南石油大学软件专业 编辑:程序博客网 时间:2024/06/05 04:11

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

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

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

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

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

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

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

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

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是个自定义的类。用来装载一些通讯常用的数据,比如发送者,消息体之类的。

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

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

0 0
原创粉丝点击