> For the complete documentation index, see [llms.txt](https://xiao-chuan.gitbook.io/3d-engines/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://xiao-chuan.gitbook.io/3d-engines/guan-yu-you-xi-yin-qing/1-shi-mo-shi-you-xi-yin-qing.md).

# 什么是游戏引擎

### 什么是游戏引擎

  百科中是这么解释游戏引擎的 “游戏引擎指一些已编写好的可编辑电脑游戏系统”，这种解释看似什么都说了，可又感觉什么都没说。这里给出一个容易理解的定义：“游戏引擎是为了提高游戏研发效率而开发的一整套组件模块和工具集合”。

### 解决什么问题

  游戏引擎的诞生，可以有效的减少重复代码编写，游戏开发者无需再像之前一样，反复编写底层游戏基础代码，现在只需在一套完整框架的基础上，利用引擎将美术和音效等媒体素材进行整合，高效便捷地生成游戏成品。换言之，游戏引擎为开发者提供了一套持续优化并且可复用的模块化地基工具组件，开发者能够在此基础上像“搭积木”一样，可以简洁、高效地“拼”出游戏。这极大地提升了游戏开发效率。

### 引擎是如何诞生

  如果没有游戏引擎能开发游戏么？要回答这个问题，需要从游戏是如何开发的说起。早期的游戏基本都是由一个或者几个软件工程师从零开始编写创造出来的，这类游戏都相对简单，一个或者几个人就能开发一款游戏。不同游戏的代码没有什么通用的部分，所以在游戏制作开发的早起阶段根本没有游戏引擎的概念。例如1980年发售并火遍全球的《吃豆人》游戏，就是游戏开发人员一行一行代码出来的。

  随着游戏行业的发展，市场规模的不断扩大，游戏也逐渐变得复杂。随之出现了不同类型的游戏，出现了RPG游戏（角色扮演游戏，例如：《魔兽世界（World of Warcraft）》），过关游戏（例如《超级玛丽》），射击游戏（例如：《反恐精英》，《绝地求生》）...

  有些游戏公司在开发游戏的时候，开发者在一次又一次的游戏开发中发现了很多组件和工具是可以被重复使用的，于是他们将这部分重复使用的组件和工具抽离出来，逐渐形成了公司内部通用的软件库和工具集，这些软件库和工具集会在后面的游戏开发中被重复使用，从而提高游戏开发效率。这一整套的软件库和工具集就是早期游戏引擎的雏形。你以为故事到这就结束了吗？然而这才是开始，时代总是由一些关键人物来向前推动的，游戏引擎的发展也不例外，1991年2月1日约翰-卡马克（John Carmack）、约翰-罗梅罗（John Romero）和汤姆-霍尔（Tom Hall）三人在美国的德克萨斯州创建了一家名为Id Software的公司。这家先后发布了多款知名游戏，其中就包含了1992年的《德军总部》 ，它起到了普及第一人称射击游戏的作用；1993年的《毁灭战士》（Doom），它是第一款真正的3D游戏；1996年的《雷神之锤》，它组合了lightmap和动态光源（dynamic light sources），带来了独立3D显卡的革命；2010年《狂怒》等游戏。

  大神约翰-卡马克（John Carmack）的高明之处是具有前瞻性，不同于其他游戏公司先开发游戏再抽离公有模块的做法，他先是着手构建一套在游戏开发中一定会被用到的框架，再完成游戏开发。这就像某家初创公司，项目初期就确定了要开发一款在线商城系统，但是负责产品设计的人迟迟没有给出具体产品方案，但是项目又是倒排期，作为对最后上线日期负责的开发者无奈只能先写一套通用框架，将后期的工作量尽量前置，用以节省后期的开发时间,某开发大神的过往经验让他知道，一个在线商城无论将来产品方案设计成什么样子，商城一定包含用户管理系统，商品管理系统，订单管理系统，物流管理系统。所以早早就开发好了这样一套框架，坐等产品方案出来后，将需求方案往框架里一套，这时只需要很少的开发量就完成了这个项目。

  约翰-卡马克（John Carmack）当时可能也面临类似情况，这当然只是我个人猜测，具体情况不得而知。【后面会为约翰-卡马克做个详细介绍】，卡马克用他以往经验先开发的一套一定会被游戏开发使用到的框架和工具集。后期再用这套工具集做具体的游戏开发，用来节省游戏开发的成本。卡马克的这样操作和之前游戏抽离公用模块产生了一个本质的不同，这样是基于顶层设计进行开发的，所以这样的方式开发的模块更通用，更具可扩展性，能适用某一类通用游戏的开发。 这就是最早的游戏引擎了。
