寒夏摸鱼站

Live your dream, and share your passion.

游戏引擎技术杂谈 #1

免责声明

本文基于本人对于游戏引擎的一些拙劣的观察与实践,具有不专业性,请不要将其当做真理或圣经

比起直接使用 C/C++ 等语言直接用 IDE 工程从零开发一款游戏,省事的游戏引擎已是越来越受开发者欢迎,如 Unity、虚幻等知名游戏引擎。

这类引擎一般都是直接使用他们自己的编辑器来进行开发,把所有的功能集成在一起,靠调各种参数来实现功能。但还有另一类游戏引擎则是做成 SDK 的形式,直接套用在 IDE 工程上使用,如 Cocos2D 等。

比起直接全家桶式的开发,我个人更加倾向 SDK 开发,这种形式对写代码出身的人有种天然的亲和性,全家桶式开发反而会被复杂的参数搞的晕头转向。

引擎要有什么

我们自上而下分析这个问题。

我们一开始打开一个游戏,最先接触的就是一个窗口,所以引擎应该有 一个管理窗口的系统,然后就是加载界面,在这种状态下,就涉及到了 资源管理图像渲染,然后就是一些 BGM 和音效,就得有一个 音频系统,如果是有联机功能的游戏,还需要 网络系统,你在用鼠标键盘操作的时候,还会涉及到 控制系统,至于不同场景间切换、游戏 AI、游戏逻辑什么的,应该有一个 总控系统 来统领全局。

所以,引擎大概由这么几部分组成:

  • 图像系统:图像绘制、转换、处理等
  • 音频系统:音频播放、录制、处理等
  • 资源系统:各种文件资源的管理与控制
  • 网络系统:网络连接控制
  • 控制系统:各种输入设备控制、消息处理
  • 总控系统:场景控制

如果根据游戏特性再展开细分的话,还可以得到这样的细分结构:

窗口系统:管理窗口句柄、窗口控制
渲染系统:渲染管线管理与控制

音频控制系统:管理音频设备句柄、设备控制
音频录制系统:录制音频
音频播放系统:通道控制、音频参数控制、后处理

资源IO系统:管理资源读入与释放

服务端系统:管理网络服务端
客户端系统:与远程服务端进行连接和数据交换

输入设备管理系统:管理各种输入设备
消息钩子系统:处理窗口、输入消息

场景管理系统:管理游戏场景
状态系统:状态机管理

看起来可有点复杂呢。。。。