写在前面#
本专栏内容均为学堂在线慕课《3D 游戏引擎架构设计基础》中的内容。个人将其转化成文字和图片的版本(个人更加喜欢文字版本的教程,阅读速度更快很多),方便查阅。
原课程链接:3D 游戏引擎架构设计基础。
本文由整份的 word 文档转化而来,可选择阅读整份文档(转化成的 web 专栏阅读起来感觉会更加舒服)。链接放到最后。
导图#
课程思维导图:
大图查看链接:高清版
因此,本专栏将根据导图的索引,分为 7 个章节。
索引#
- 概述
- [场景管理]((https://olimiya.github.io/posts/3D 游戏引擎入门课程 2—— 场景管理)
- [资源管理]((https://olimiya.github.io/posts/3D 游戏引擎入门课程 3—— 资源管理)
- [场景渲染]((https://olimiya.github.io/posts/3D 游戏引擎入门课程 4—— 场景渲染)
- [角色动画]((https://olimiya.github.io/posts/3D 游戏引擎入门课程 5—— 角色动画)
- [事件处理与脚本语言]((https://olimiya.github.io/posts/3D 游戏引擎入门课程 6—— 事件处理与脚本语言)
- [内存管理]((https://olimiya.github.io/posts/3D 游戏引擎入门课程 7—— 内存管理与插件机制)
概述#
游戏引擎概述#
定义:如果把游戏开发中的核心基础功能独立抽象出来,供游戏开发者调用,这样的组件被称为游戏引擎。使用游戏引擎开发游戏,能够提高游戏的开发效率和质量。在早期的游戏开发中,设计者们逐步地、不断地抽取出游戏设计的公共组件,将这些功能抽象化、模块化,形成了游戏引擎。随着游戏开发的不断成熟,游戏引擎的功能已经越来越强大。
其中开源的游戏引擎包括,Unreal Engine 4,OGRE,Panda3D 等,流行的商业游戏引擎包括,Unity 等。下文将主要通过 OGRE 和 Panda3D 进行举例。
游戏引擎框架概述#
游戏引擎的需求分析,即游戏引擎应该包含的功能。
其中环境需求包括:
-
目标硬件
-
设备驱动
-
操作系统
-
第三方软件包和中间件
-
支撑引擎的平台独立层
功能需求包括:
-
引擎的核心基础模块
-
引擎资源管理
-
引擎场景管理和图形渲染
-
角色动画
-
声音
-
物理和碰撞检测
-
人工智能
-
图形用户界面 GUI
-
脚本处理等
游戏引擎的设计原则包括:功能完善(多),运行效率高(快),性能稳定(好),同时具备良好的扩展性。
游戏引擎的架构设计,应将以下内容按照一定的方式组合在一起:
-
基础平台的支撑组件
-
第三方的基础库:数据运算、图形处理、数据结构等
-
引擎功能(如上面功能需求所述)
游戏引擎层次化组织架构:
功能游戏#
功能游戏的分类:
游戏引擎中的设计模式#
创建型模式:
-
单例模式:系统中只存在一个实例,一般是全程存在的。
-
抽象工厂模式:为创建若干个有关联的工厂类提供接口,是抽象类,无需制定具体类。
-
工厂模式:提供若干个有关联对象的接口,是具体类,可以实例化。
结构性模式:
- 适配器模式:将一个类的接口转换成所希望的另外一个类的接口。让原本因接口不兼容而不能一起使用的那些类可以一起工作。通过该模式可以为第三方的基础库定义统一的接口。
行为性模式:
-
迭代器模式:顺序访问一个聚合对象中的各个元素,但不需要了解该对象的内部表示。
-
观察者模式:由多个观察者对象同时监听某个主体,当主体对象发生变化时,通知所有的观察者,并做成响应。
-
访问者模式:将一些操作封装,并施加于某种数据结构元素上,当修改封装的操作时,不会影响被施加的数据结构,即可以将不稳定的方法和稳定的数据结构隔离。如,将渲染算法封装为访问者模式的类,可将方法和数据隔离,如果某个数据结构的某个算法发生改变,则只需要修改算法,而不影响数据结构的元素。
文档链接#
[金山文档] 3D 游戏引擎基础.doc