《Unity 3D游戏客户端基础框架》系统设计
引言
最近到看一个 《贪吃蛇大战开发实例》,其中 贪吃蛇大作战游戏开发实战(3):系统构架设计 提供的系统架构的设计思路我觉得还是值得学习一下的,接下来的内容是我看完视频后的一点笔记。
架构设计原则:
1.系统分层:
根据功能特性,可以大致将整个系统分为:
- 视图层(游戏输入、战斗 View、业务 UI):视图层也可以遵循
Mvc
的思路来做进一步分层; - 业务层(核心玩法、业务模块);
- 服务层(模块管理、UI 管理、用户管理、资源管理、配置管理、网络管理、支付管理、分享管理);
- UI 控件;
- 基础类库(储存管理、调试器、数学库、网络库、单例、Monobehaviour能力)。
上面的分层是根据游戏具体逻辑来划分的,这些层级之间也并非完全独立,存在依赖关系,为了服务于视图层,通常会把一些常用的 UI 试图进行控件化,也就是会多出一 UI控件层,而且整个系统也需要使用到很多基础类库,所以也就有了基础类库层。
2.单向依赖:
只要有两点要求:
- 不同层级之间的模块是单向依赖的;
- 仅允许上层模块依赖下层模块。
也就是说,上层模块可以之间访问下层模块的属性,而下层模块不能直接访问上层模块,下层模块的变化通过 消息/事件 通知上层模块,上层模块通过监听这些 消息/事件 来及时获取下层的属性变化。
3.模块解耦:
各个业务层模块之间,不直接访问彼此的代码,这样可以达到编译不依赖,实现静态解耦,那么他们要通过什么方式进行通信呢?
最常用的做法:业务层模块之间通过【事件】与【消息】的方式通讯。
具体实现方式:模块 A 需要调用模块 B 的逻辑时,会广播一条特殊的 消息/事件,而模块 B 的监听此 消息/事件,当收到 消息/事件 时执行指定的逻辑。
这里的
消息
或事件
都是不依赖于发起者的抽象类型,通常使用一个抽象消息管理类来管理,经常使用字符串常量来表示不同的消息类型。
4.全局事件:
这种方式适用的情景:
- 有些事件并非从固定模块发出(可能会有多个模块都会发出此类事件);
- 有些事件模块影响全局逻辑。
可以在多个模块中监听同一个事件,当事件在某个模块发生,则广播一个全局的事件,此时所有监听了此事件的模块都会触发相应的操作。
缺点:使用全局事件会使得代码的阅读性下降,因为当一个事件有多个触发源时,当事件触发时我们无法准确地定位事件是从何处触发的。(也可以通过日志记录来索引事件源头)
5.模块独立:
主要适用于服务层模块的设计,核心思想就是将两个服务模块必须有的公共逻辑抽象出来,放在基础类库中。
6.代码重用:
将可以重复使用的代码,在系统层级上做一些小整合,例如:
- 业务层公共逻辑 –> 服务层
- 服务层公共逻辑 –> 基础类库
- 视图层公共逻辑 –> UI 控件
6.设计模式:
善用一些设计模式,可以让代码更加高效,这里列举一些游戏开发中常用的设计模式及其适用的场合:
设计模式 | 应用场合 |
---|---|
观察者模式 | 业务层之间通讯、上层与下层通讯、客户端与服务器通讯 |
命令模式 | 业务层之间通讯 |
单例模式 | 服务层为上层提供功能 |
MVC 模式 | 视图层与业务层通讯 |
工厂模式 | 视图层实例的创建、核心玩法中角色的创建、特效的创建管理 |
《Unity 3D游戏客户端基础框架》系统设计相关推荐
- 《Unity 3D游戏客户端基础框架》protobuf 导excel表格数据
前言: 之前使用NPOI插件编写的导表工具,其实就是直接将数据进行序列化,解析时还需要进行反序列化,步骤比较繁复,最近看到Google的一个开源的项目protobuf,不仅可以用于进行excel表格数 ...
- 《Unity 3D 游戏开发技术详解与典型案例》——1.1节Unity 3D基础知识概览
本节书摘来自异步社区<Unity 3D 游戏开发技术详解与典型案例>一书中的第1章,第1.1节Unity 3D基础知识概览,作者 吴亚峰 , 于复兴,更多章节内容可以访问云栖社区" ...
- Unity 3D数学\图形学基础-游戏开发(向量)
Unity 3D数学\图形学基础-游戏开发(向量) 向量运算的几何意义 标量与向量的计算 向量的模长 标准化向量 normalize 0向量 向量与向量的加减法 两点间距离公式(向量间距离) 点积,点 ...
- 雨松MOMO《Unity 3D游戏开发》源码公布
原创文章如需转载请注明:转载自雨松MOMO程序研究院 本文链接地址:雨松MOMO<Unity 3D游戏开发>源码公布 下载源码时,首先大家请登陆图灵社区找到<Unity 3D游戏开发 ...
- 【Unity 3D游戏开发】在Unity使用NoSQL数据库方法介绍
随着游戏体积和功能的不断叠加,游戏中的数据也变得越来越庞杂,这其中既包括玩家产生的游戏存档等数据,例如关卡数.金币等,也包括游戏配置数据,例如每一关的配置情况.尽管Unity提供了PlayerPref ...
- Unity 3D游戏开发项目《战斗吧!勇士》
目录 版权声明:本博客涉及的内容是对本人游戏作品<战斗吧!勇士>项目的总结,发布在网络上,旨在大家交流学习.互相促进.严禁用于其他一切用途. 摘要 游戏开发技术概述 Unity 3D 游戏 ...
- Unity 3D - 游戏开发中的Lua
Unity 3D - 游戏开发中的Lua : 本文作者:秦元培, 本文出处:http://blog.csdn.net/qinyuanpei/article/details/39826323 前言 : ...
- Unity 3D游戏开发学习教程
用C#用Unity3D制作游戏 你会学到: 您将学习3D游戏开发基础知识,以使用Unity3D引擎推进事物. 到本课程结束时,他们将可以轻松制作任何类型的游戏,无论是3D还是2D MP4 |视频:h2 ...
- Unity 3D游戏代码编程学习教程 Full Guide To Unity 3D C#: Learn To Code Making 3D Games
Unity 3D游戏代码编程学习教程 Full Guide To Unity 3D & C#: Learn To Code Making 3D Games Full Guide To Unit ...
- unity 3d游戏开发_使用Unity 5开发3D游戏
unity 3d游戏开发 If there's one thing cooler than playing games, it's building games. 如果有比玩游戏更酷的一件事,那就是构 ...
最新文章
- VBA实战技巧精粹011:新建只有1张工作表的工作簿
- Linux入门笔记——系统目录结构
- SSRF,以weblogic为案例
- 在服务器上远程使用tensorboard查看训练loss和准确率
- 鸿蒙分布式通讯子系统,【鸿蒙】分布式通信子系统--让华为手机发现Hi3861开发板...
- websql使用实例
- 《Spark大数据分析实战》——第2章Spark开发与环境配置
- STL学习笔记1--vector
- cass小插件集合_CASS插件合集 - 下载 - 搜珍网
- 计算机及应用自考好过吗,希望有经验的给我分析一下,我想自考计算机及应用!...
- Python压缩解压zip文件
- python统计大写字符个数和小写英文字符_统计一个字符串中大写字母字符和小写字母字符,数字字符出现的次数...
- 联想全系列 Lenovo ThinkPad ThinkBook Thinkcenter ThinkStation 原厂恢复系统
- 3DMAX建模入门:美国队长的盾牌图文教程,过程炒鸡详细(下)
- 用户正确使用趋势跟随的交易系统的方法
- Count Min Sketch: from Finding the Majority Element problem to heavy hitter problem,统计元素频率的利器
- 600 岁的故宫,也上了人工智能的车
- C. 实验7-2-7 方阵循环右移
- firefox+android+平板,Mozilla展示Android平板火狐浏览器设计细节
- H3C设备配置wifi