内核游戏源码-如何设计和构建游戏引擎

之前做过游戏引擎,看过Torque等几个商业引擎的源码,也用过一些第三方引擎开发游戏,比如Unity、Cocos、Laya等昨天讲了一个游戏引擎应该是什么样的,关于架构和设计,我做了一个图,如下。 接下来我会根据这张图分三个层次给大家讲解一个游戏引擎的架构和设计。

游戏的本质似乎是一个运行在OS上的App,所以游戏所使用的各种系统支持和系统调用都是基于OS的API函数来完成的。 现在的游戏引擎要求跨平台,一次性开发可以打包发布到Android、IOS、Windows、Mac、Linux等。游戏引擎首先会创建一个平台具体层,主要包括两个方面:

(1)为游戏引擎提供统一的socket OS系统调用;

(2)为游戏App打包发布提供的发布工具和发布环境。

平台表示层主要提供以下功能:

应用支持:创建游戏窗口,游戏应用有窗口载体;

Storm支持:调用OS API获取OS的键盘、鼠标、触摸、重力感应等操作Storm;

声音支持:调用OS API播放声音;

文件IO支持:调用OS的文件操作API,提供文件读/写等功能;

平台API调用支持:调用手机相册等;

网络支持:调用OS的网络socket进行网络通信;

SDK支持:提供SDK接入机制;

OpenGL支持:提供对平台的OpenGL环境的支持;

该函数向外界打开一个统一的socket,用于对下层的调用。 在内部,不同的平台有不同的实现。 因此,跨平台游戏引擎有对应的项目和针对不同平台的项目。 游戏打包时,不同平台使用平台特定的App项目进行打包。 有了平台具体层,就解决了跨平台的问题。 为游戏引擎的核心奠定了坚实的基础。

引擎内核

平台具体层编写完成后,基于平台具体层提供的操作系统套接字支持构建游戏引擎的核心。 游戏引擎的核心包括以下主要模块:

主循环:游戏引擎可能是一个循环,大致伪代码如下

主循环(){

接收输入并处理它;

迭代更新游戏场景中的元素和流程逻辑;

提交给GPU渲染并绘制游戏的一帧;

如果 CPU 空闲,请保持适当的分辨率并正常睡眠。

渲染管线和Shader:基于OpenGL/DirectX等建立渲染策略和渲染管线,为用户提供Shader开发机制。 渲染策略不同。 一个游戏引擎可能有多种渲染策略(渲染管线),比如前向渲染、延迟渲染,像Unity一样,也有可编程的渲染管线。 在可编程渲染管线的基础上,推出了高清渲染管线和轻量级渲染管线。 每个渲染管线和策略都有对应的Shader机制来配合,为用户提供Shader编译机制,实现Shader开发。

风暴输入:接入OS平台风暴,然后将风暴发送到特定节点或作为系统风暴上报给应用层。

网络模块:游戏开发中的网络就是长连接Socket(H5使用websocket)和http契约内核游戏源码,所以我们也必须支持这一点。 Socket是操作系统提供的API。 只需要通过具体的平台来调用,http我们可以使用一些第三方库来编码和解析http合约。

文件IO:向应用层提供一些套接字,然后调用平台表示层的底层文件IO系统调用来完成文件IO服务。

声音模块:提供一些面向参考层的套接字或组件,然后调用平台具体层来产生声音。 播放声音文件,支持相应的声音格式,如wav、ogg、mp3等,外部安装了这种常用声音格式的解码库。

场景管理:游戏引擎基本都是基于场景+节点的模型。 节点在场景中以场景树的形式组织。 然后在此基础上制作矩阵等相关数据结构和代码来管理场景中的各个节点。 有关对象位置的信息。

基于组件的开发模式:目前,基于组件的开发模式是游戏行业的主流模式。 Unity、cocos、Laya都采用了这些形式。 因此,引擎设计了一套组件化的开发模式机制,开发一些通用的组件,比如UI组件或者3D骨架动画组件。 这些组件可以直接用于游戏参考开发。 同时,还会提供一些粒子效果。

化学引擎:在游戏开发中,经常需要使用化学引擎来模拟真实的数学计算。 目前大多数游戏引擎的数学引擎都是外部第三方,如:libbullet、PhyX、Box2D等。

客户端脚本:脚本系统基本上是游戏引擎的标准配置。 游戏引擎核心大部分基于C++实现,C/C++代码开发相对困难。 为了提高游戏开发的门槛,提高开发的效率和速度,通常会提供脚本语言进行开发,因此需要外部脚本库。 有些脚本是引擎本身定义的,比如Torque,还有一些外部的轻量级开源第三方脚本,比如Lua、Python、JavaScript等(Unity外部脚本C#)。 同时需要将游戏引擎的socket引导到脚本中。

该模块开发完成后,游戏引擎的核心就基本完成了,包括底层架构以及为用户提供开发模型。 提供给用户的开发模型机制直接决定了你的引擎是否好用。 现在的主流是基于组件的开发,所以现在很多游戏引擎都提供了基于组件的开发机制。

游戏应用层

游戏引擎内核设计好之后,基本上就可以使用纯代码来开发基于这个引擎的游戏了。 但使用这个游戏引擎核心制作的第一个应用程序不是游戏,而是游戏引擎编辑器的应用程序。 基于游戏引擎核心,开发一款用户可以编辑、资源管理、日志管理、属性查看、编辑器扩展、粒子编辑工具等功能的“游戏”作为工具App。 通过此App内核游戏源码,您可以可视化编辑游戏场景、动画、动作、特效等,还可以基于此App进行代码编译和开发。 编辑好的场景和资源生成资源文件,运行时游戏引擎内核将其作为资源加载运行。 最后是包装出版。 游戏引擎App会有针对不同平台的外部打包工具,让用户可以直接通过App进行可视化和打包,增加了开发难度。 游戏引擎编辑器App开发完成后,可以交付给游戏厂商用于开发各类游戏。

为什么引擎厂商开源内核源代码而不开源编辑器?

最后跟大家分享一下游戏引擎行业中一个有趣的现象。 为什么很多游戏引擎开源了游戏引擎的核心源码,而不开源引擎编辑器的源码? 比如Cocos、Laya等。这里分为免费游戏引擎和需要授权的引擎。 免费游戏引擎如Cocos、Laya,引擎内核代码直接开源但不开源编辑器。 这样做的原因是你可以自定义和更改引擎的底层代码和底层引擎的bug。 大多数游戏都是基于编辑器的。 如果编辑器的源代码是开放的,那么一个社区中可能会有很多不同的分支。 比如cocos-lua社区曾经发布过一个quick-cocos-lua社区,使得整个版本的更新迭代失控,存在分裂的风险。 对于开发者来说不一定是好事。 商业授权代码引擎本身有商业授权的资金门槛,而且还有保密合同,相对来说比较好,更容易控制。

明天我就在这里跟大家分享一下游戏引擎框架设计。 制造一台好的发动机确实不容易。 为引擎厂商,尤其是免费引擎厂商点赞。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 游戏源码 内核游戏源码-如何设计和构建游戏引擎 https://www.wkzy.net/game/189650.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务