凉鞋:我所理解的框架 【Unity 游戏框架搭建】 (7)

而 《万能游戏框架》里的消息则是以模块为单位的。比如 UI 模块则只负责 UI 界面相关的消息收发和注册,Audio 模块同理也是。 而跨模块之间则用一个简单的 switch 进行转发。比较出彩的是其中的关于频段的设计。我们都知道 C# 里的 ushort 的最大值是 65536,视频中每个模块的频段长度设为 3000,这样最多可以有 21 个 模块,足够使用了。每个模块可以注册 3000 个消息。如何实现,这里看下代码就明白了。

public enum MgrId { UI = 0 * 3000, Audio = 1 * 3000, ... } public enum UIXXEvent { Start = (ushort)MgrId.UI, XX, YY, End, } public enum UIYYEvent { Start = (ushort)UIXXEvent.End, ZZ, End, }

笔者当时看到这里才觉得自己对语言的了解真的是很浅,一个简单的 ushort + 枚举就可以很巧妙地设计出基于模块的消息框架,这种思想非常值得借鉴。笔者马上在 QFramework 中实现了一套类似的消息框架。很简单,一个 QMsgCenter 充当跨模块之间的消息转发。一个 QMgrBehaviour 作为模块的基类,负责收发和注册模块内的消息,一个 QMonoBehaviour 只要一个脚本继承它,就可以发送消息和注册处理消息。而事实上,有了这套消息框架,QFramework 才算是一个真正的 Manager Of Managers 框架。

初涉工作流

公司的以为前辈也有一套类似的框架,不过在以上这套消息框架的基础之上,做了 UI 的脚本生成。在此之前笔者都是用 transform.Find 方式来获取感兴趣的 UI 控件的。比如 Button、Image 等等。而前辈的 UI 脚本生成省去了这些工作量。实现方式也是比较容易理解。就是在一个 UI 的 Prefab 上,对于感兴趣的控件挂上一个脚本,比如 UIMark/UIBind。然后从 UI 的 Prefab 的 Root 开始进行深度优先搜索。搜索过程中记录每个标记脚本的路径,之后根据路径生成一行行的 transform.Find(路径)就好了。而这个工具则是节省了制作 UI Prefab 过程中的体力劳动。是对工作流上的优化。QFramework 又收录了一个工具。

支撑团队协作

团队协作的一个基础就是将业务模块化。而业务很多时候是在完成大量的 UI 界面。在这里简单分享下笔者的做法。笔者首先会为每个 UI 界面都建立一个测试场景,只要运行 Unity 就可以看到 UI 界面的效果。这样做的目的很简单,就是方便快速修改,并且界面之间互相独立,只要约定好谁来负责哪个模块,就不会造成版本控制冲突。 还有一个建议要做的就是,为每个 UI 界面都提供一个 Init 接口。一些 UI 界面要用的数据,笔者建议是从一开始通过初始化传进去,而不是在 UI 里面去访问某个 Manager。这一点要做到需要花些功夫,不过好处就是 UI 作为一个黑盒,没有上下文,可以传入一些测试数据而不是真实数据就可以看效果并做一些测试了,当项目规模变大时,改一个 UI 界面或者查找一个 bug 都会变得很容易。这样的做法解决了多个问题,一石 N 鸟。

C# 进阶

C# 真的是越用越觉得它的强大。QFramework 的进步是离不开 C# 语言的学习的。这里笔者遇到了一个决定 QFramework 未来的语法特性,就是静态 this 扩展。语法细节这里不多说,大家自行百度。学习了这个语法之后,一些本来要靠继承才能实现的 cocos2dx 风格的 API 全部可以用这个语法实现。简直不要太好用!都后来的链式结构编程全都是以这个为基础的。

QFramework 成为公司的指定框架

在笔者的坚持下,经过了团队的 Code Review 之后,大家终于统一了使用 QFramework 作为公司的框架。从这时候开始 QFramework 开始飞速发展。

第一个项目

第一个项目三个人完成的,架构阶段以笔者之前定的代码规范为基础与团队成员共同完成了项目的代码规范,随后完成了项目结构目录约定等等一系列约定,之后与项目的负责人根据项目需求确定了插件的选择,而框架自然就用 QFramework 了。除了以上这些还做了一件事,就是画了一张不知道是什么的图。

凉鞋:我所理解的框架 【Unity 游戏框架搭建】


上边又有排期,又有分工,又有一些技术实现细节,还有各个模块的划分。总之看着很乱,但是它的作用就是让我们三个人很清晰地对项目的各个结构,以及近期的排期等信息,项目的难点也一目了然。做好排期和分析后,就开始进行开发了,最终这个项目不管是时间还是品质上,都完成得很不错。这就是充分(相比之前)做架构的好处。

竞争对手出现

在做第一个项目的时候,来了一位大牛,带着一套 MMO 框架。框架好用的工具真的很多。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygpyd.html