为了 易于团队协助 、方便业务扩展、复用业务逻辑,项目采用模块结构思想。如一般可以分为以下模块:
- 登录模块
- 大厅模块
- 游戏战斗模块
- 每日签到模块
- 邮件系统模块
- 聊天系统模块
- ...
为了方便同一时刻团队能同时开发多个UI界面等,项目采用 单场景 + 多Prefab 结构,场景主要用于挂载不同模块的UI界面,每个模块的UI界面由相应模块的 Prefab 组成。
- 模块常量类:负责定义由该模块产生的各种常量
- 模块事件类:负责定义由该模块产生的各种事件消息
- 模块数据类:负责保存和读取数据,基本上没有任何其它逻辑
- 模块逻辑类:负责游戏逻辑,包括网络通信、数据处理等,并负责更新数据类中的数据
- 模块面板类:负责界面UI显示,关联UI的Prefab。可以读取数据类中的数据,以刷新UI界面;可调用模块类中的方法,做出各种处理
- 模块文件夹名:
XXX
- 模块常量类名:
XXXConst.ts
- 模块事件类名:
XXXEvent.ts
- 模块数据类名:
XXXModel.ts
- 模块逻辑类名:
XXXModule.ts
- 模块面板类名:
XXXPanelPrefab.ts
- 模块常量类名:
在每一个模块中:
- 模块逻辑类 和 模块数据类 有且只有 一个
- 模块逻辑类 是全局可以访问
- 模块面板类 可以有 多个
- 模块面板类 可以直接通过面板路由器进行展示、隐藏、销毁(gg.panelRouter.show/hide/destroy)
- 模块面板类 可以直接引用/使用所有模块的 模块逻辑类
- 模块面板类 自身不应该被任意的 模块逻辑类 和 模块数据类 引用(如:不能直接通过 模块逻辑类 直接操作某个模块的面板类),以便于移植 “除面板以外的模块和数据” 到其它项目使用。如: 同一公司的登录、聊天、背包等大部分是可以复用的
- 模块面板类 的UI更新可以通过在 Component 的
onEnable
和onDisable
去注册/注销 模块事件类所定义的事件。当数据更新、逻辑变化时,广播事件以驱动UI更新
- 在合适的 bundle 中新建模块名字命名的目录,如
XXX
- 在
XXX
目录下创建以下文件XXXConst.ts
(可选,如果有模块自己本身产生的常量,有则需要)XXXEvent.ts
(可选,如果有模块自己本身产生的事件,则需要)XXXModel.ts
(必须)XXXModule.ts
(必须)XXXPanelPrefab.ts
(可选,如果有面板显示,则需要)