总览
游戏引擎由工具架构和运行时组件组成(Tool+RunTime),继续细分又可以把运行时组件分为4层。故总体是五层架构。
学习目标
- 掌握游戏引擎整体架构,了解每层功能
- 明确调用关系:上层调用下层
- 日后写代码要先思考,这个功能应该写在哪层
五层架构
Tool Layer 工具层
提供可视化界面和接口给使用引擎的人员。
这层也处理动画,mesh等资产的第三方格式导入导出(资产管道)
Function Layer 功能层
物理,渲染,动画都在这层 ![在这里插入图片描述](https://img-blog.csdnimg.cn/26fe41b2b2db4deea143296861d1e1c9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bOw5bqm5YGP5YGP,size_20,color_FFFFFF,t_70,g_se,x_16) 阅读这层的代码从Tick入手(UE4的Tick,Unity的Update): ![在这里插入图片描述](https://img-blog.csdnimg.cn/2a4cbeef57054d7f83adbe26fe84d270.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bOw5bqm5YGP5YGP,size_20,color_FFFFFF,t_70,g_se,x_16) Tick又分为tickLogic和tickRender。分别处理逻辑和渲染
Resource Layer 资源层
负责存储联系不同的游戏资产,管理资产生命周期(。
如材质,纹理和mesh的资产依赖记录、
如不需要的资产回收和延迟加载(deferred loading,如远处的景等到人物靠近了才进行加载)
Core Layer 核心层
通用功能的集合。
如内存管理,垃圾回收,自定义数据结构及算法,矩阵计算等数学库。
这层的代码要精心设计,因其对效率要求很高。
Platform Layer 平台层
使引擎能够兼容各种硬件平台,实现引擎的平台无关性
由于不同游戏平台对同一个文件的处理可能不一样。如Win和Mac路径的写法。更严重的是硬件架构都可能不同。所以需要一个平台独立层运行在各层之下,包装操作系统调用和其它API,保证引擎在不同硬件平台上达到相同的运行效果 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f15f58ff29b245fbabaa99c738003316.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bOw5bqm5YGP5YGP,size_20,color_FFFFFF,t_70,g_se,x_16) (可以通过虚函数实现)
第三方中间件
在上述五层的构造中,都由可能使用到现成的第三方中间件。数据结构和算法,碰撞和物理,图形,角色动画,人工智能,生物力学……这些都有现成的优秀第三方库可以使用
故第三方中间件在整个引擎中属于横跨五层的存在![在这里插入图片描述](https://img-blog.csdnimg.cn/72c2d3fa1fa341e49b188f996451caa5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bOw5bqm5YGP5YGP,size_19,color_FFFFFF,t_70,g_se,x_16)
小结
游戏引擎可以分为五层架构,从下往上分别是:平台层、核心层、资源层、功能层、工具层。其中前四层属于runtime:运行时组件。工具层为引擎的工具架构
只允许上层调用下层接口,避免出现循环依赖
基本所有引擎的架构都是由此基本架构延申。但不同游戏类型的游戏引擎存在差异(一个具体的游戏引擎通常是为了某类型的游戏设计的) ![在这里插入图片描述](https://img-blog.csdnimg.cn/da926878130842bc8569f2ce1be285f4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bOw5bqm5YGP5YGP,size_20,color_FFFFFF,t_70,g_se,x_16)
|