You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
11 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 第5讲 | 构建游戏场景的武器:地图编辑器
今天我想和你聊一聊基础知识模块的最后一部分地图编辑器。为了给之后的内容铺垫我还会顺带介绍一些游戏Demo的知识。
我们先来看一幅图。这看起来是一款FPS射击游戏对不对也对也不对。说对因为这确实是一款FPS游戏说不对这其实只是一幅地图但是这幅地图来自《魔兽争霸3》。更准确地说这是使用《魔兽争霸3》的地图编辑器制作出来的一幅游戏地图。
![](https://static001.geekbang.org/resource/image/21/28/2180e87327f796c9d69b2b2222399d28.jpeg)
《魔兽争霸3》发布之初没人能想到并且能做出这样“变态”且“不走寻常路”的地图。《魔兽争霸3》的地图编辑器之强大直到它发布五、六年后才有人开始制作出这样令人匪夷所思的地图。
**地图编辑器在游戏开发的前期扮演着非常重要的角色,它的主要功能就是用来制作游戏地图。** 因为我们现在是一个人来开发一款游戏,不涉及分工的问题。而常规的团队在进行游戏开发的过程中,用地图编辑器制作地图是由美术来负责的。
地图编辑器本身一般会由专业的地图编辑器程序员来开发完成。地图编辑器可以使用原生引擎所支持的语言来编写比如C/C++也可以使用引擎加嵌入脚本语言的方式来进行编写比如Lua等。但是现在一些成熟的游戏引擎都会自带地图编辑器。所以大多数时候地图编辑器不需要你自己开发。
## 地图编辑器有哪些种类?
地图编辑器并非千篇一律。由于游戏类型的不同,地图编辑器也不相同。比如我们做一个《大富翁》类的游戏,我们就需要做一个**斜45度角的地图编辑器**。
如果是**俯视角度的游戏**地图编辑器的视角呈现方式也类似斜45度角的游戏。这两种编辑器制作地图的方式极其类似唯一不同的是**斜45度角是用菱形的地图块拼接而成俯视视角是用矩形的地图块拼接而成的。**
![](https://static001.geekbang.org/resource/image/e8/d1/e86acc386c52fd571b6e879630489bd1.jpg)
我们做一个**横版卷轴游戏**,就需要在地图编辑器内摆放横版的地图。如果地图是重复地图,类似《管道鸟》,那就需要程序员重复贴图,而不需要在地图编辑器重复编辑相同的地图。
![](https://static001.geekbang.org/resource/image/67/cc/679b41409741dfae9f7e28a18cd0aacc.jpg)
3D游戏就会有3D地图编辑器就像前面的《魔兽争霸》编辑器就是一个3D视角。地图编辑器的种类不同保存的地图类型和文件结构也不一样。有些地图编辑器保存的是图片和位置而有一些保存的却是一个脚本文件方便直接载入游戏程序。
## 为什么要了解地图编辑器的编写过程?
我刚才说过,大多数时候地图编辑器不需要你自己开发。但是我们依然要了解地图编辑器是如何编写出来的,至于了解这些究竟有什么用呢?我继续来给你讲。
1.**编写地图编辑器的过程,能让你更好地了解游戏引擎。** 从编写地图编辑器开始,就是对游戏引擎的一次全面应用。为什么这么说呢,因为在编写地图编辑器的过程中,除了音乐模块或许暂时不会被用到外,利用引擎编写的地图编辑器、地图资源的载入代码、保存代码等等,都会被用在正式的游戏中。
2.**编写地图编辑器的过程,可以优化游戏开发流程。** 程序员之间会讨论关于资源载入、游戏内容加载和读取这些基础问题,并将最基础的流程完整地梳理一遍。在游戏正式开始开发之前,把这些流程梳理一遍,能极大提升开发过程中的流畅性。
3.**编写地图编辑器的过程涉及UI、按钮和键盘事件的使用。**地图编辑器开发完毕后主要是给美术人员使用所以UI的点击、鼠标键盘事件是必不可少的。在地图编辑器中运用UI、按钮、键盘事件后在正式游戏开发中这些代码可以直接移植到游戏代码中使用。
4.**编写地图编辑器的过程,能起到团队磨合的作用。** 在编写的过程中,你会接触到策划、美术等很多人的意见,程序员之间也会对引擎的应用有很多的讨论。
## 地图编辑器与关卡编辑器
说到地图编辑器,不得不提到关卡编辑器。**关卡编辑器是一种主要给策划使用的编辑器,它涉及地图中的关卡内容。** 一般情况下,关卡编辑器不涉及具体的地图细节,但是它涉及总体的游戏地图和游戏流程。
简单来说,地图编辑器的功能就相当于房屋的结构朝向图。我们可以从这张图里,看到每个房间的俯视图。里面包括门的位置、阳台的位置,甚至厕所的位置。而装修公司设计家居,就相当于关卡编辑器的功能。设计师会在你已有房间的结构内,摆放各种桌子、椅子、床、柜子、灯泡等具体的家居用品。
在实际开发过程中,很多时候,只有一些成体系的大游戏才会把关卡编辑器单独分出来。很多时候,对一些小游戏来说,关卡编辑器和地图编辑器经常是在一起的,你可以在地图编辑器里面直接来编写关卡。这张 《坦克大战》的地图编辑器中就包含了关卡编辑器的内容。
![](https://static001.geekbang.org/resource/image/07/31/0751315e5a271167ebfc8f7253073831.jpg)
这里有一个3D游戏的关卡编辑器的界面。我们常见的关卡编辑器的界面一般都是这样的。这个界面最左侧的对话框是物件的选择界面具体包括关卡内物件的选择和摆放界面右侧的对话框是属性选择界面定义这个物件的属性比如这个物件是否可以弹跳、爆炸等等界面右下角是物件X、Y、Z轴的编辑可以自定义物件的拉伸和缩放。
![](https://static001.geekbang.org/resource/image/4f/95/4f55227b8c3e5abd0fc67d3224413895.jpg)
我们拿FPS枪战游戏来举例。我们可以先在编辑器内画完所有俯视角的**地图通路**,然后在这个地方**放上某种武器**,在那个地方**放上某种升级包**。这就是一个关卡的总体架构。
随后,你需要在编辑器里编写一些简单的脚本程序。这些脚本程序会涉及玩家在进入游戏后总体的游戏进程和逻辑。比如,你可能会写“分数达到多少之后,等级+1”“击杀敌人达到多少之后分数+10”“失血达到多少出现什么情况”等等。
总之,关卡编辑器和地图编辑器的功能,就好比家装设计图和房屋结构朝向图,一个是在地图内设置物件的摆放位置和具体的表现形式;一个是设计地图本身。
## 为什么要做游戏Demo
按照传统的标准游戏开发流程在编写完地图编辑器之后就要开发游戏了。事实上开发游戏的初期我们必须要制作这款游戏的Demo。很多商业游戏制作之前都是要先做游戏Demo的。你或许会问为什么不立刻开发一个正式的游戏呢我总结了一下有以下几方面的原因
1.**游戏Demo可以完成游戏核心框架。** 绝大部分情况下最终完成的游戏成品都会和游戏Demo有较大的差异。这些差异体现在美术画面的优化细节、操作的优化细节、网络优化上等等。**游戏Demo所肩负的任务就是完成该游戏总体的核心内容框架。** 在这个框架内,我们可以一窥游戏的总体逻辑、想呈现给玩家的是什么内容。
比如《三国志》题材的游戏游戏Demo就会呈现在大地图上进行城市内政的管理、军队的管理以及战斗画面这些游戏的核心内容比如FPS射击游戏游戏Demo呈现出的就是主角在一个有限的空间内进行射击和击杀敌人的操作因为这些就是游戏的核心。至于游戏是不是好玩画面是不是炫酷音乐是不是好听并不在游戏Demo中呈现。
2.**游戏Demo可以测试bug。** 在游戏开发中地图编辑器做完之后会载入经地图编辑器制作的地图这些地图在游戏中是否有bug是否需要调整游戏体验好不好。这些内容在游戏Demo中将被测试出来并且在正式开发中进行调整。
3.**游戏Demo可以磨合开发团队。** 前面我们提到有一些引擎自带地图编辑器所以大多数情况下地图编辑器不需要你自己编写。这个时候你敲下的第一行代码就是游戏Demo的代码所以游戏Demo就肩负另一个使命就是团队人员的磨合。和地图编辑器一样第一次编写游戏Demo会有来自策划、美术、程序等各方面的意见和讨论而制作游戏Demo的过程对磨合团队是非常有利的。
4.**游戏Demo最终会被舍弃。** 在开发过程中Demo版本是不稳定的是有bug的。只要不是特别严重的一般不会去进行特别的修正。但是一般来说bug会在正式版本中被修正。所以游戏Demo肩负的另一个任务就是“试水”。程序代码在游戏中跑起来是不是有瓶颈bug出现在哪里哪些部分可以从Demo中提取出来在正式开发中使用哪些部分可以在正式版本中优化这些都是游戏Demo所背负的“使命”。
很多开发团队为了节省时间很多公司老板为了节省成本在地图编辑器完成之后就跳过了游戏Demo开发这个步骤或者有些开发leader根本就不知道要做Demo这个流程所以一开始就去做正式版。这是个很危险的动作。
因为按照流程,**如果一上来就开始编写正式版本的游戏很有可能会出现无法预估的bug和无法修正的问题。** 比如,地图编辑器中保存的地图,在正式游戏中就出现极大的错误,连修正的时间都没有,最终修修补补急急忙忙地上线,玩家一片怨声载道。游戏死亡。
当然由于游戏类型不同地图编辑器、关卡编辑器和游戏Demo并非是必须要做的内容就像我们要做的“打飞机”这样简单的游戏甚至贪吃蛇、俄罗斯方块、象棋、围棋等等这些都不需要任何编辑器这些单一简单的游戏开发流程简单如果出现问题直接重新编写就可以了。
## 小结
这一节我讲了地图编辑器、关卡编辑器和游戏Demo相关的内容你只需要记住这些重点
* 开发地图编辑器的过程可以帮助开发人员了解引擎、优化开发流程、测试bug、磨合团队
* 关卡编辑器之于地图编辑器,就好比装修设计图和房屋朝向图之间的关系;
* 游戏Demo的使命是完成游戏核心框架测试地图编辑器等问题Demo最终会被舍弃
* 在游戏开发的正规流程中我们要经历地图编辑器、关卡编辑器、游戏Demo、正式开发等几个流程每一个流程都肩负不一样的任务。但简单如贪吃蛇类的游戏我们可以直接上手编写代码。
最后,给你留一道小思考题吧。
用地图编辑器制作出来的地图有没有取巧的保存方法,让游戏程序读取地图时更方便?
欢迎留言说出你的看法,我在下一节的挑战中等你!