《BitUp》:像素风格游戏及地图编辑器的开发历程
本文将由《BitUp》的开发团队介绍这款游戏在Unity中的制作过程,包括关卡设计和自定义地图编辑器的开发历程。
《BitUp》的开发过程
来自墨西哥的Cosmogonia是一个由5名成员组成的小型独立游戏团队,2013年,我们得益于PlayStation拉丁美洲孵化计划的契机组建了工作室。
《BitUp》是工作室的第一款游戏,我们希望借助这款游戏实现创意。从最初设计游戏概念开始,《BitUp》就像拥有着灵魂的生物般不断发生变化。
我们希望让这款游戏致敬不同的游戏时代,最初的想法是让游戏通过图像的变化而进行演变,使游戏从文字冒险游戏逐渐转变为3D游戏。
随着我们开发的进展,原来的想法开始发生变化,游戏的叙事让游戏内容和世界逐渐成形。这时候,我们想到了给游戏提供实际视觉风格的方法,即16位风格。由此我们开始构建艺术风格,并使用了“像素化3D效果”的开发方向。
由于严重缺少资金,我们在过去五年间断断续续开发这个项目,并且同时为其它独立工作室去完成一些工作。现在积攒了足够的资金,终于可以专注于自己的项目。
在这段时间期间,我们制作了2个原型。第一个原型使用Unity 4制作,运行在PSVita主机上。我们花了三周时间完成这个演示,并将游戏在索尼开发峰会活动上向发行商展示。
下图是PSVita中的原型。
第二个原型使用UE 4制作,运行在PS4 Dev Kit上。
下图是PS4中的原型。
在此期间,游戏也发生了变化,由原来的聚焦战斗的2D平台游戏,转变为注重探索的银河战士恶魔城游戏。
艺术风格
根据“16位时代的角色在游戏中观察周围世界”的设定,我们开始设想游戏世界的组成方式,效果和制作方法。
艺术风格的主要目标是创造一个充满活力的游戏世界。虽然我们设定是16位游戏,但我们希望把它做成生动的世界。我们无法直接从屏幕看出这种生动感,但我们可以通过游戏内角色体会到这种生动感。
开发工具
为了实现艺术风格,所有游戏世界都是为UE 4原型而定制。游戏中的内容都由立方体组成,由于这不是体素化游戏,所有内容都需要手工制作,从而实现最佳性能。
《BitUp》的第二个原型在PS4 Dev Kit上运行效果不错,但是要渲染的几何体数量太多。我们尝试使用Substance Designer制作灵活的可定制纹理,从而提供类似这些几何体的相同外观。
在尝试过使用UE 4制作原型后,我们最终将《BitUp》的新版本使用Unity 2019开发。
这背后的主要原因有三点:
我们的团队对Unity拥有更丰富的开发经验。
Unity最新的版本可以实现非常出色的视觉效果,我们使用了非常强大且优化效果很好的轻量级渲染管线LWRP。
作为严重缺少资金的独立游戏团队,使用UE 4的制作成本过于昂贵。
关卡设计
《BitUp》中的所有关卡都使用Unity的建模工具ProBuilder制作,ProBuilder帮助我们加快了关卡设计和测试过程。
我们进行了大量测试,从而找到组成所有游戏世界的最佳管线。在一些成员进行关卡设计时,其他成员可以处理相同区域的场景布置和光照设置,然后把两个部分组合起来并进行测试。
虽然ProBuilder是一个早期测试的好工具,但随着我们开始使用更加精简的管线,很多内容会出现问题和崩溃情况。因此,我们把所有内容都转变为使用UModeler插件来处理。
由于游戏地图的复杂性,我们开发了一个地图编辑器,用于控制和组成玩家可以使用和理解的地图。该编辑器在Unity中开发,因此所有内容都可以结合使用。
地图编辑器
在一次关于地图可用性和设计方面的漫长讨论后,我们产生了制作地图编辑器的想法。
我们主要讨论的问题包括:我们应该展示什么?如何展示?玩家如何与地图进行交互?在确定好关于地图问题的答案后,程序的工作便开始了。
为了实现想要的功能,我们必须要取得地图的所有信息,这些信息分为:区域,部分和模块,然后把信息存在可以持续更新和保存的数据结构中。
我们使用的数据结构是邻接表,每项数据都是带有连接的节点。在项目中,节点是包含数组中对应模块数据的部分,这里的模块指地图上可以划分出的最小部分。但主要问题在于如何构造这个数据结构。
游戏关卡是通过手工进行建模的,唯一的规则是整个关卡大小必须可以被以模块为单位完整划分。除此之外,关卡可能有各种变化。
首先,我们的想法是设计一个算法,它可以读取关卡的网格数据,形成自己的数据结构,逻辑上把关卡划分为“构想中的”组成模块,但我们很快放弃了这个想法。
我们意识到可以尝试自己编写数据结构,于是编写了一个带有部分和模块的小型JSON文件,然后创建一个简单的脚本,它可以读取文件并反序列化数据结构,这种的方法起到了作用。我们有了制作地图所需要的数据,即实际关卡的表现形式。
但又遇到另外一个问题是:要写入的部分不止一个,而是有很多个,每个部分都有自己的模块数据,以及和其它部分的连接。
手动完成所有操作将是一项无休止的任务,每次关卡发生改动时,都要对文件进行更新。此外,出于安全性考虑,最终文件可能不是JSON格式或其它可以直接读取的文件。
下面将介绍我们开发的地图编辑器。
上图是一个基于节点的编辑器,每个节点表示一个部分和相应的信息,各部分可以互相连接。通过使用节点的Dimensions字段,我们可以定义模块的网格,在模块检视窗口中快速绘制组成各部分的模块。
我们曾使用过Unity中的节点编辑器,而且经常使用旧的IMGUI API。为了进行绘图,同时也为了扩展编辑器,我们的地图编辑器使用Unity 2019.1中UIElements来开发,它完全改变了在编辑器中绘图的范例。
IMGUI使用即时绘图模式,执行绘图的代码位于循环中,并且会在每帧执行。UIElements更类似于网页,我们可以定义对象的层级,然后引擎会绘制对象。
在完成编辑器的开发后,制作地图文件的方法非常简单。我们只要添加节点,给节点加入必要的信息,然后点击鼠标导入文件,这样我们便得到了一张游戏地图。游戏的世界非常庞大,大约有超过80个不同的部分。
资源
游戏的第一批资源使用传统方法并通过手工制作,但现在我们会使用Houdini程序化来快速实现更有趣的结果。
模块性特点是该游戏的核心,因此所有资源都会考虑到模块性而设计。这样我们可以使用相同的部分组成许多变体,使用Unity的GPU实例化功能来结合这些部分,从而提高游戏的性能。
VFX
为了让所有内容有相同的艺术风格,视觉效果保持着相同的“像素风格”外观,相应的效果可以在我们的VFX展示图集看到。
Unity粒子系统对制作视觉效果来说非常灵活,我们可以在较短时间内制作多种效果。
小结
《BitUp》已经确定好叙事、角色、环境和关卡的设计,即将完成游戏的预制作阶段,预计在明年发布。后续我们将分享《BitUp》更多的开发故事以及游戏效果展示。
下载Unity Connect APP,请点击此处。 观看部分Unity官方视频,请关注B站帐户:Unity官方。
你可以访问Unity答疑专区留下你的问题,Unity社区和官方团队帮你解答:
Connect.unity.com/g/discussion
推荐阅读
官方活动
加入Unity Connect,创建个人频道,成为与Unity社区同行的伙伴-Unity Buddy,享受专属福利。了解如何成为Unity Buddy,请点击此处。
喜欢本文,请点“在看”