游戏开发之路2

游戏开发

客户端

    用来开发客户端的语言非常多,unity引擎用的是c#cocos引擎用的是c++js虚幻4引擎也是用c++,还有javapython

    不过主流都是用unity虚幻4,再者就是自家公司研发的游戏引擎。

    由于我本身也不是客户端开发的,所以这这部分知识不会太细,就罗列一下引擎中的基本模块以及客户端开发过程中需要注意的地方。

引擎:

  1. 渲染部分(2d和3d) ——渲染管线
  2. 物理与碰撞
  3. 音乐和音效
  4. 场景管理
  5. 交互处理
  6. 寻路 ——A星算法、Mesh网格
  7. 动画

开发文档

  • 制定开发规范
    1. 变量命名、空间命名规范
    2. 程序逻辑架构
    3. 资源制作规范
    4. 模块开发步骤
  • UI框架
    1. 可扩展性
    2. 可维护性
    3. 易用性
  • 网络模块
    1. TCP与UDP
    2. 包头、包体
    3. 数据交换格式
      • protobuf
      • json
      • 二进制流
  • 资源模块
    1. 制定存放规则
    2. 制定UI、Icon、Texutre 存放规则
    3. 制定模型存放规则
    4. 制定特效存放规则
    5. 制定资源命名规则
  • 资源工具
    1. 统一模型设置
    2. 统一贴图设置
  • 美术规格
    1. 协助制定模型制作规范
    2. 协助统一UI资源制作规范
    3. 协助制作场景制作规范
    4. 协助制作纹理制作规范
  • 美术检查工具

    大体上,客户端有这些事情要做。除了这些,如果要开发联机游戏,开发者要考虑选择帧同步还是状态同步的方式来完成客户端服务端数据同步,这个是一个难点。

服务端

用于服务端开发的语言有C++JavaC#Go、python、nodejs…

主流的语言是C++ 。为什么呢?C++最接近低层,可以直接对内存分配进行操作,而且它本身也非常稳定,兼容多个平台。但是这个好处导致它开发非常困难,开发起来效率低,内存管理复杂。

服务端除了业务逻辑外还有数据库优化维护,这些后续有空再讲,现在就简单介绍几个服务端架构,以及服务端跟客户端之间的通信。

第一代游戏服务器架构

数据库——游戏服务器——客户端 最原始也是最基本的结构,适合简单的游戏框架。

1
2
3
4
5
6
st=>start: DB
op=>operation: GameServe
e=>end: Client

st->op->e

后续更加完善的游戏服务器架构

DB1、DB2 —— GS1、GS2、公共服务器——客户端——登陆服——调度服——GS1…. 这种比较成熟的框架就适合大部分网络游戏了,也是很多厂家的首选。

这个就当了解一下,详细之后再写,有学习意愿可以评论留言一起探讨!

服务器架构之后,就是服务端跟客户端之间的通信了。这部分一般是通过TCP协议或者UDP协议,然后自己定义报文格式以及数据格式,可以选用protobuf或者protostuff(protobuf升级版据说比快很多),虽然json格式也有,传输过程中也非常方便查看数据内容,但是json占的内存太大传输时间太慢,并且明文传输或者说字符串传输,被人拦截下来容易被人得知传输信息,不太安全。

那么传输数据知道了,业务逻辑处理在哪里呢?这里就出现这个问题了,假设数据都传输到服务端统一计算过后,然后分发给各个客户端,那么可能会有某个客户端太卡丢包了,其他人就要等他重新连接了;那数据都在客户端处理,最终结果上报到服务端,服务端然后再广播到其他客户端,这样可能会遇到一个问题,我的数据是浮点数,发送给服务端可能会失真,就不准确了。这两种处理方式,前者叫状态同步,后者叫帧同步

由于时间问题,这两个讲起来可能也会很多,之后再详细写一篇关于它们的文章。