极客时间已完结课程限时免费阅读

第5讲 | 构建游戏场景的武器:地图编辑器

第5讲 | 构建游戏场景的武器:地图编辑器-极客时间

第5讲 | 构建游戏场景的武器:地图编辑器

讲述:蔡能

时长09:31大小4.38M

今天,我想和你聊一聊基础知识模块的最后一部分,地图编辑器。为了给之后的内容铺垫,我还会顺带介绍一些游戏 Demo 的知识。
我们先来看一幅图。这看起来是一款 FPS 射击游戏对不对?也对也不对。说对,因为这确实是一款 FPS 游戏;说不对,这其实只是一幅地图,但是这幅地图来自《魔兽争霸 3》。更准确地说,这是使用《魔兽争霸 3》的地图编辑器制作出来的一幅游戏地图。
《魔兽争霸 3》发布之初,没人能想到并且能做出这样“变态”且“不走寻常路”的地图。《魔兽争霸 3》的地图编辑器之强大,直到它发布五、六年后,才有人开始制作出这样令人匪夷所思的地图。
地图编辑器在游戏开发的前期扮演着非常重要的角色,它的主要功能就是用来制作游戏地图。 因为我们现在是一个人来开发一款游戏,不涉及分工的问题。而常规的团队在进行游戏开发的过程中,用地图编辑器制作地图是由美术来负责的。
地图编辑器本身一般会由专业的地图编辑器程序员来开发完成。地图编辑器可以使用原生引擎所支持的语言来编写,比如 C/C++;也可以使用引擎加嵌入脚本语言的方式来进行编写,比如 Lua 等。但是现在,一些成熟的游戏引擎都会自带地图编辑器。所以,大多数时候地图编辑器不需要你自己开发。

地图编辑器有哪些种类?

地图编辑器并非千篇一律。由于游戏类型的不同,地图编辑器也不相同。比如我们做一个《大富翁》类的游戏,我们就需要做一个斜 45 度角的地图编辑器
如果是俯视角度的游戏,地图编辑器的视角呈现方式也类似斜 45 度角的游戏。这两种编辑器制作地图的方式极其类似,唯一不同的是,斜 45 度角是用菱形的地图块拼接而成,俯视视角是用矩形的地图块拼接而成的。
我们做一个横版卷轴游戏,就需要在地图编辑器内摆放横版的地图。如果地图是重复地图,类似《管道鸟》,那就需要程序员重复贴图,而不需要在地图编辑器重复编辑相同的地图。
3D 游戏就会有 3D 地图编辑器,就像前面的《魔兽争霸》编辑器,就是一个 3D 视角。地图编辑器的种类不同,保存的地图类型和文件结构也不一样。有些地图编辑器保存的是图片和位置,而有一些保存的却是一个脚本文件,方便直接载入游戏程序。

为什么要了解地图编辑器的编写过程?

我刚才说过,大多数时候地图编辑器不需要你自己开发。但是我们依然要了解地图编辑器是如何编写出来的,至于了解这些究竟有什么用呢?我继续来给你讲。
1.编写地图编辑器的过程,能让你更好地了解游戏引擎。 从编写地图编辑器开始,就是对游戏引擎的一次全面应用。为什么这么说呢,因为在编写地图编辑器的过程中,除了音乐模块或许暂时不会被用到外,利用引擎编写的地图编辑器、地图资源的载入代码、保存代码等等,都会被用在正式的游戏中。
2.编写地图编辑器的过程,可以优化游戏开发流程。 程序员之间会讨论关于资源载入、游戏内容加载和读取这些基础问题,并将最基础的流程完整地梳理一遍。在游戏正式开始开发之前,把这些流程梳理一遍,能极大提升开发过程中的流畅性。
3.编写地图编辑器的过程,涉及 UI、按钮和键盘事件的使用。地图编辑器开发完毕后,主要是给美术人员使用,所以 UI 的点击、鼠标键盘事件是必不可少的。在地图编辑器中运用 UI、按钮、键盘事件后,在正式游戏开发中,这些代码可以直接移植到游戏代码中使用。
4.编写地图编辑器的过程,能起到团队磨合的作用。 在编写的过程中,你会接触到策划、美术等很多人的意见,程序员之间也会对引擎的应用有很多的讨论。

地图编辑器与关卡编辑器

说到地图编辑器,不得不提到关卡编辑器。关卡编辑器是一种主要给策划使用的编辑器,它涉及地图中的关卡内容。 一般情况下,关卡编辑器不涉及具体的地图细节,但是它涉及总体的游戏地图和游戏流程。
简单来说,地图编辑器的功能就相当于房屋的结构朝向图。我们可以从这张图里,看到每个房间的俯视图。里面包括门的位置、阳台的位置,甚至厕所的位置。而装修公司设计家居,就相当于关卡编辑器的功能。设计师会在你已有房间的结构内,摆放各种桌子、椅子、床、柜子、灯泡等具体的家居用品。
在实际开发过程中,很多时候,只有一些成体系的大游戏才会把关卡编辑器单独分出来。很多时候,对一些小游戏来说,关卡编辑器和地图编辑器经常是在一起的,你可以在地图编辑器里面直接来编写关卡。这张 《坦克大战》的地图编辑器中就包含了关卡编辑器的内容。
这里有一个 3D 游戏的关卡编辑器的界面。我们常见的关卡编辑器的界面一般都是这样的。这个界面最左侧的对话框,是物件的选择界面,具体包括关卡内物件的选择和摆放;界面右侧的对话框是属性选择界面,定义这个物件的属性,比如这个物件是否可以弹跳、爆炸等等;界面右下角是物件 X、Y、Z 轴的编辑,可以自定义物件的拉伸和缩放。
我们拿 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、正式开发等几个流程,每一个流程都肩负不一样的任务。但简单如贪吃蛇类的游戏,我们可以直接上手编写代码。
最后,给你留一道小思考题吧。
用地图编辑器制作出来的地图有没有取巧的保存方法,让游戏程序读取地图时更方便?
欢迎留言说出你的看法,我在下一节的挑战中等你!
分享给需要的人,Ta购买本课程,你将得18
生成海报并分享

赞 4

提建议

上一篇
第4讲 | 底层绘图接口的妙用
下一篇
第6讲 | 从0开始整理开发流程
 写留言

精选留言(15)

  • OCEAN
    2018-06-05
    动态加载,如魔兽世界跑图时的做法
    6
  • 凯叔
    2018-06-06
    老师好,感谢您的分享。 说说我的看法吧,我觉得,不管是地图编辑器,关卡编辑器,还是现在很多h5游戏使用的动画编辑器,都是为了提高开发效率存在的。是否需要还是看游戏的类型。(比如很多卡牌游戏就不存在地图一说) 说白了地图编辑器就是用可视化的方式,方便制作人员制作游戏中需要的一些数据和素材而已。这里面可以涉及游戏的逻辑配置(比如魔兽的地图编辑器),也可以不涉及(比如星际争霸1的地图编辑器)
    展开
    6
  • 壬大师
    2018-06-05
    老师,web类软件系统的服务器端都需要第三方的服务器容器,比如Tomcat、Jboss、Weblogic等。在游戏软件系统的服务器端是否也需要第三方的服务器容器,还是只是原生运行的服务器程序就可以了?

    作者回复: 看具体游戏类型和技术选型,一般会写原生的,用http形式的服务器对于游戏来说并不常见,除非是弱交互类型的。具体可以参考我新出版的书《游戏服务器架构与优化》😀

    4
  • 小猫藏鱼
    2018-06-05
    知道有一个通用的叫 tilemap 的免费地编,2d的
    5
  • 小猫藏鱼
    2018-08-28
    保存成只记录物件类型和物件位置的数据,比如用 xml, csv 等方式保存地图内容。不知道这个算不算

    作者回复: 也可以

    3
  • iHTC
    2019-05-12
    你好,我想问一下,因为我是做iOS开发的,然后是用的是苹果macOS系统,然后教程里面给的都是windows系统的教程,所以我想问一下,对应的macOS系统是不是也有对应的工具或者说也是相似的配置就可以了?我已经有4五年没有接触windows系统了😂😂
    共 1 条评论
    1
  • gerald
    2018-06-05
    有没有人和我一样希望更新快一点😂

    作者回复: 谢谢,每周三次

    1
  • 不吐槽会死的喵星人
    2018-06-05
    我想起一个地牢的格子游戏,把地图做成瓦片地图,只要在对应位置放上对应瓦片,就可以完成地图了。这样的话只要记录每个地点的位置及瓦片种类,铺上去就可以了。而且不需要加载全部地图,只需要加载需要显示的部分就可以了,等人物走过去之后再加载新瓦片。这样估计加载新地图会比较快。
    1
  • Eden Ma
    2022-07-10
    保存为脚本?然后用到的时候通过脚本读取相应的素材和位置等,将需要的部分加载出来?
  • 中心没有思想
    2019-08-19
    首先比较地图内容,如果地图内容变化不大,只重新加载不同部分,保留相同部分。应该会加快地图的加载速度。
  • 小王
    2018-06-22
    同一张图到不同地方转换角度,这个算不算取巧,😄

    作者回复: 不算,除了载入语句,代码还是照样写。

  • sky
    2018-06-13
    unity的地图编辑器呢,有什么工具做出来的能直接导入使用么
  • 观望者
    2018-06-08
    请问老师,关卡编辑器就是地图内的物件么?还有没有别的内容。会不会涉及到游戏的逻辑和策略?或者说,关卡编辑器也是静态的内容?

    作者回复: 关卡编辑器一般是属于添加条件和物件,比如各种道具,各种条件判断,比如走到某个点,就触发某个特殊动画或者游戏事件。这些就涉及到游戏的一部分逻辑,关卡设计完就是静态的。

  • 陈海龙
    2018-06-06
    老师,我是一名现在大二的计算机专业学生,有C++和一定算法基础,想试水游戏开发相关,就订了老师的课程,请问老师您方便推荐几门参考书搭配课程看吗?

    作者回复: 如果你是学习游戏服务器,推荐我自己的书籍《游戏服务器架构与优化》,如果是客户端,可以看 面向对象游戏开发,3D绘图程序设计,等等,图形算法类都可以去看。

  • kk
    2018-06-05
    老师能不能给一些具体的列子嘛?

    作者回复: 指的是哪方面的例子?