小白Unity框架开发学习记录(二)

写在开头

    在上一篇文章中,简单介绍了框架的基本概念和展望了一下我所要实现的框架,并且对这周提出了目标,接下来,这篇文章将介绍我这周搭建框架的成果,可能写的不是特别好,但是总算迈出了第一步,还有很大的改进空间。



框架的基本结构

    框架的结构是一个框架搭建的基本,好的结构能够大层度的降低模块的间的耦合和模块的扩展难度。我搭建框架所用的结构是从网上借鉴而来,通过manager of managers 建立各个模块,再使用消息收发机制进行模块间的通信,下面我将详细介绍框架的基本结构。

Manager of Managers

    Manager of Managers就是将各个模块单独做一个Manager管理器,让所有关于这个模块的事件都让这个Manager去执行操作。比如将所有UI相关操作都由UIManager去执行,所有关于音频播放的操作都由AudioManager去执行。


Manager of Managers

模块通信

    在不使用框架的时候,大多数人对各个Manager的调用可能就是简单的Manager.方法名()进行方法的调用,这样在短时间内可能看不出什么问题,但是到了后期,你想对程序进行修改的时候,他的弊病就会显现出来,比如你想要改变某一方法的名字的时候,你得找到它所有的引用,并且进行逐一修改,这种调用方式使得各个模块间的耦合特别高,让后期的修改变得异常繁琐,所以我将框架内各模块的通信封装,使其通过消息的收发进行通信。

    这也是我从别的大牛那里学习来的方法,消息通信模拟的是网络运营商的消息收发机制。比如一台手机发送信息的过程,手机发送信息会先将消息发送到最近的基站,然后通过基站查询要发送的对象是否也在该基站范围内,如果在则将消息通过该基站发送给要发送的对象,如果不在则通过一些技术找到发送对象所在基站,然后将消息发送到那个基站,再由基站发送给要发送的对象。我们框架的模块通信就是要模仿这一过程。

    我们把各个Manager当做基站,每个Manager管理的脚本当做手机,通过一个总控制器寻找脚本所在的Manager,这样就构成了一个完整的通信模块。

同一Manager下的模块通信


不同Manager下的模块通信

消息机制

    上面我们已经了解了模块间如何通信,接下来就说一说通信时消息发送的具体机制。一般一个模块下都会有大量的脚本,那我们如何知道我们要把消息发送给谁,而消息的接收者又如何知道有人给自己发送了消息呢?

    为了解决上述问题,我们给每个消息定义一个ID,发送者在发送消息时会携带ID,接收者会收录自己感兴趣的ID,这样当有自己感兴趣的ID的消息的时候,接收者就会做出响应。这里可能和上述的手机通信有所不同,在这里的发送者并不在乎所发送的信息有没有人接收,他只是向上传递这样一个信息,而Manager负责向所有感兴趣的接受者发送这个信息,并且接收者可以同时对多个ID感兴趣。接收者会将自己感兴趣的ID注册进Manager,这样Manager就能判断自己该把相应得到消息发送给谁。

通过Manager转发消息

完整模块    

    在完成了上述讲解之后,我们来进行具体实现的讨论。

    首先Manager里会对外提供注册,解除注册,发送消息等的方法,在这里我将这些方法单独拿出来做了一个类EventController,所有与消息有关的操作,我都把他们放在这个类里,而Manager会持有这样一个类的对象,帮其进行相关操作。

    对于消息的注册,可能会有多个脚本对同一id感兴趣,Manager里可能会有多个id注册,所以在这里采用了字典加链表的存储方式,id为字典的键,链表为值,一个id有多个脚本注册时,对链表进行append。

    对于事件的接收者,必须实现一个IEventHandle接口,实现接口的ProcessEvent方法,完成对事件的处理操作。

简略类图



代码实现


Manager的实现(单例模板)

    一个游戏必然由很多Manager组成,每个Manager都由一个单例组成,而单例的脚本大多代码都是重复的,如果每个Manager都去重复的写这些代码,不仅会影响美观,还会有时间上的浪费,所以就有了接下来的方法实现一个单例的模板。

单例

    这里不对代码进行详细的解释,有兴趣的可以参考这篇文章《单例的模板与最佳实践》

EventController


EventController

EventNode


EventNode

IEventHandle

IEventHandle



结尾

    这一周其实还写了很多代码,因为精力有限,后面的一些代码没有去说,可能现在有一些代码和后面关联,没有解释的很清楚,这一周暂时只写这么多了,代码已上传GitHub。项目地址


参考资料

《单例的模板与最佳实践》

《CTO带你做万能游戏框架》

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,659评论 0 15
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,863评论 6 13
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,084评论 1 32
  • 一,对话 马仔:“妈妈你爱我吗?” 我:“爱。” 我 “我爱你,不过我更爱自己,我会先爱自己,再爱你” 马仔没做声...
    Joy幸福力教练阅读 213评论 0 0
  • “细节决定成败”这句话很好,我在班级管理是对学生常规要求十分细致。如:卫生方面卫生工具摆放整齐,规定每位同学座位周...
    风轻云淡lzm阅读 250评论 0 4