太空动作游戏《Phobos Vector Prime》创作经验分享

本文将由来自Gunstar Studio的几位技术大牛将分享他们在太空动作游戏《Phobos Vector Prime》中制作爆炸效果、角色纹理和构建关卡的方法技巧。

项目简介
Gunstar Studio是由4名成员组成的一家独立游戏工作室,《Phobos Vector Prime》项目始于2016年6月,我们一起构思了这款游戏。由于热衷与朋友们一起玩游戏,所以一开始是希望制作一款多人对战游戏,体验体验竞技的快感。但是作为一家独立游戏工作室,要想制作一个大型多人游戏显然是十分困难的,所以在首个游戏设计文档中,我们加入了单人游戏模式,这个模式主要用于帮助玩家了解游戏玩法,并为扩大玩家群体做准备。

首个游戏原型由多个太空飞船组成,而后演变成了MOBA类游戏,因为很多玩家很喜欢这种游戏类型。一开始我们打算做出一款竞技性十足的游戏,它将结合MOBA游戏的策略性和80年代街机游戏的爽快感。

《Phobos Vector Prime》的画面应该充满怀旧感,就像童年时的那种风格,但不会完全照抄那样的游戏,而是将街机游戏中的可玩要素提取出来,结合当下最新技术进行制作。这意味着,不会使用像素风画面和8比特音乐风格,而会参考街机游戏中逼真的环境和富有挑战的游戏体验。所以当玩家玩《Phobos Vector Prime》时,玩家会看到各种颜色和灯光,会听着复古音乐击杀大量敌人。这些要素本应在八十年代的游戏中出现,但由于技术限制,当时没能制作出这样的效果。

技术角度
《Phobos Vector Prime》所使用的引擎是Unity,因为Unity对小型或者独立游戏工作室更为实用。开发的主要目标是实现流畅易玩的游戏体验,使这类游戏的老玩家在几分钟内掌握太空飞船的操作方法,同时让新玩家也能适应游戏的难度曲线。

为了达到目前的游戏效果,我们不断基于玩家反馈对游戏进行了大量修改,玩家们的想法帮助我们大大改善了游戏。

在开发期间,考虑到游戏中大量敌人所带来的紧张感,我们对屏幕画面中的敌人数量十分重视,我们想要让玩家有一种四面楚歌的感觉,在枪林弹雨中躲闪的同时终结所有敌人。我们希望重现经典子弹地狱类游戏的特色,但我们也知道,那样会对游戏的性能产生很大影响,所以一开始我们就制作了多个相应的Unity工具。

下面是我们所用到的二个提高性能的基本技巧:
1. 优化物理效果:在开发早期定义参与物理交互的元素,使用图层系统组织好这些元素,配置出图层碰撞矩阵。这个方法能防止引擎不断计算物体之间是否发生碰撞,根据游戏设计内容,有些物体无论何时都不应与其它对象有任何关系。Unity所限定的最大图层数是32个,所以你必须谨慎管理好图层,避免使用过多图层,毕竟它们各自都有特定的用途。

在决定要创建哪些图层前,我们推荐先设计一个简单的表格,上面列出不同的游戏元素并指出它们的相互关系。这是我们为首个原型所定义的表格。

当决定好要使用哪些图层后,先创建图层,然后在引擎中配置图层碰撞矩阵(依次点击Edit> Project Settings> Physics打开)。这就是我们当前的配置:

2. 对象池(Object Pooling):当要在游戏中创建并摧毁大量对象时,例如子弹和敌人,在引擎中将对象不断实例化并移除是个效率很低的方法。最常用的解决方案是先预实例化对象,把它们设为禁用状态,然后在需要时激活。

环境设计
为了构建关卡,我们首先在图纸上进行设计,然后使用Photoshop将设计图呈现在电脑上。我们的游戏设计师会处理每个关卡的草图,然后在设计完成后,将草图传入Unity中,经过如下步骤构建出地图:首先放置各类资源,例如石块、墙体和建筑,建筑类型取决于任务中所要呈现的艺术风格,这些资源用来限制玩家的移动路径。

对于那些不在开放空间(但会在小行星或行星上)中开发的地图,我们使用了Unity的Terrain功能。


当场景布置好后,我们就开始将资源与可交互对象进行整合,例如:门和生成器。为了加速开发进程,我们的开发人员创建了一个专用关卡编辑器,它能帮助实现对象并迭代关卡设计。

开发游戏元素(包括飞船、炮塔和敌人等)也是个十分有趣的过程,因为它们的设计直接影响了关卡的构造。最初,游戏中的太空飞船外观质量较低,主要用于设计机械装置的原型。在核心游戏内容完成后,我们便开始专注于提高游戏的图形效果,所以我们决定完全重新设计所有模型,呈现出更为专业和精细的美学风格。

为了给游戏对象建模,我们使用了多个工具,其中主要用的是Cinema 4D,用来设计所有元素的低多边形模型。我们的工作流程开始于在Cinema 4D中创建具有少量多边形的设计模型,然后用Zbrush给它加入丰富的细节,从而转变为高多边形模型。

下面是游戏中猎鹰号太空飞船和敌方炮塔的UV图和相应低多边形模型。

为了制作出太空飞船等细节丰富的游戏对象,我们使用了各种Zbrush工具:细分工具、alpha笔刷、采样工具、ZRemesher等。我们尝试保留了最初的低多边形形状,因为我们想要让模型设计既简单又吸人眼球,与此同时还能拥有良好的游戏性能。在我们实现出想要的效果后,我们便把最后的高多边形模型利用Xnormal导出,从中获取了ID、法线、环境光遮蔽、Bent 法线、高度和弧度(Curvature)通道。

有了这些贴图,我们接着用Quixel Suite给模型制作纹理。我们首先制作的是用于底座的金属材质,然后我们再制作油漆图层,附上污迹和尘土。表示损伤状态的遮罩会放在边缘位置,而表示划痕的遮罩则放在物体表面。

这是得到的最终效果。

VFX视觉特效
游戏的视觉特效会很大程度影响大众对游戏专业性的评价,而且能从本质上影响游戏的感觉,所以我们花费了大量时间来研究如何制作视觉特效直到实现当前效果。

在创建效果时,我们通常遵循这二个基本步骤:
1  在纸上绘制一个对象不同状态的草图,包含从它的被创建到被摧毁的所有状态,然后预估每个状态的持续时间。
2 从游戏市场上搜索并选取与理想效果接近的参考图样。我们的爆炸效果受到了《Just Cause 3》和《Battlefield 1》这二款游戏的很大影响,我们仔细研究过它们,然后制作出了我们希望的爆炸效果。

一旦确定要实现的效果,并决定好所使用的方法后,我们就开始在引擎上进行测试,直到实现理想的视觉效果。如果发现某个想法无法实现出来,便会放弃掉。根据效果的不同,这个过程的持续时间从几小时到数周不等。

我们在此用制作爆炸效果的过程作为例子来详细讲解。
1. 首先我们使用流体模拟器来生成爆炸效果。例如:FlumeFX、Phoenix FD等工具。

2. 然后我们将完整的爆炸动画以32帧的画面导出到二个渲染器中,其中一个只包含爆炸的火焰,而另一个包含完整的爆炸效果,每个.PNG文件的分辨率为256×256像素。因为爆炸效果的整体形状为圆形,我们决定使用前面提到的渲染器,使爆炸效果在游戏中从任意角度看都有不错的效果。

3. 我们使用GlueIt来从渲染器生成的画面中获取精灵图集。本示例中,火焰动画较短,所以我们去除了结尾的多个帧。最后,我们会得到.JPG格式的纹理图片,分辨率为1536×1024,共有24帧,背景色为黑色。此外,我们决定移除纹理中的黑色再将纹理导入Unity材质中,从而获取我们想要的颜色。对于烟雾动画的精灵图集,其纹理分辨率为2048×2048,一共有64帧,为了方便处理渲染器的透明度,PNG格式。


4. 在Unity中我们创建了二种材质,一种使用了Additive混合模式,用于火焰,它能为爆炸增加亮度;另一种使用了Alpha混合模式,用于烟雾, 放在火焰材质之下。

5. 我们使用了名为Particle Playground的粒子系统,你也可以使用Unity的默认工具达到类似效果,在其中我们创建了二个粒子系统,并且每个粒子系统都使用之前创建的相应材质。我们定义了粒子实例化的位置,这样会决定爆炸效果的形状大小。烟雾和火焰必须共享实例化的位置,这样会使每个火焰粒子都能添加到对应烟雾粒子上,从而增加亮度并正确匹配爆炸动画。我们使用了Texture Sheet Animation纹理图集动画功能来配置和复制精灵图集的动画,要记住,设置好分类方法很重要,这样能使火焰在烟雾中显示出来。

6. 我们还为爆炸效果的其它部分创建了相应的材质、着色器和纹理。

火焰余烬:这些粒子生成时会带有作用力属性和随机旋转方向,这个方向会在爆炸效果周围沿着圆形锯齿线随机选取。


震荡波形:包含一个粒子和一个附加着色器,着色器的大小会在存在周期中不断增大。


波形扭曲:它和震荡波形有相似的属性,只不过它还多了个扭曲着色器。

火光:带有一个粒子,它会为爆炸中心带来更多光亮。

火花:带有小型闪光,它们会带来受到伤害和破坏的感觉。

7. 最后我们将效果的各个部分组合起来,创建出爆炸效果的预制件,以供需要时使用。当然了,使用后期处理效果进行美化也十分重要,这样能使效果看起来更好。本示例中,我们只使用了Amplify Bloom来提升场景的光亮效果。

多人游戏部分
首先我们制作了一个多人游戏演示视频,然后用同样的机械基础构建了单人游戏模式。也许这个过程听起来有点奇怪,但从一开始,我们就认为《Phobos Vector Prime》会拥有很多种游戏方式,而其中一种便是故事战役。

我们的故事模式能让玩家了解MOBA模式中的三个对立阵营的起源故事,这三个阵营分别是叛乱军、自卫队和赏金猎人,与此同时还能了解游戏的核心玩法。

我们制作出这个模式是为了介绍MOBA游戏的经典策略。例如:第一个战役中的主角所担任的角色是坦克,所以关卡会要求玩家承受伤害并保卫建筑。我们还增强了每艘飞船特定技能的功能,随着故事的发展,这些技能会一一被激活。

小结
《Phobos Vector Prime》今年4月在PlayStation 4上发行。在完成首个战役的发布后,会继续开发其他故事战役和完善多人游戏模式。今天的分享都就到这里了,希望每个独立游戏开发者都能开发出受到玩家欢迎的游戏。更多游戏制作经验分享尽在Unity官方中文社区(UnityChina.cn) !

简化你的工作流程-Unity Hub (Beta)

Unity Hub最新推出的用于简化工作流程的桌面端应用程序,现已提供测试版本。它提供了一个统一的地方用于管理Unity项目、简化下载、查找以及安装多个Unity版本。而且它还能帮你了解快速上手的功能,例如新出的模板功能。赶紧来尝试使用Unity Hub吧 !

下载Unity Hub(Beta) 
Windows: https://public-cdn.cloud.unity3d.com/hub/prod/UnityHubSetup.exe
Mac: https://public-cdn.cloud.unity3d.com/hub/prod/UnityHubSetup.dmg

Unity Hub介绍
Unity Hub桌面端应用程序旨在简化你打开Unity的方式。初识Unity Hub,你可能觉得它似乎没什么特别之处,但实际上它有着不少新功能。

首先它是一个与Unity编辑器分开的独立应用程序。这是简化工作流程的重要步骤。如果你经常使用Unity,下面的文件夹截图或许就是你启动Unity的时候需要面对的。

这个文件夹里存在不同版本的Unity文件夹,它们没有与你的Unity项目一一关联。这可不好。既然这是很多用户开始时经历的问题,我们便打算从它开始说起。

Unity Hub功能介绍

整合Unity编辑器的管理
Unity Hub有一个专用区域用于查找和下载Unity编辑器的版本。你可以轻松找到并下载最新版本的Unity,包括beta测试版本。而且,你还可以手动加入已经安装到电脑中的Unity编辑器版本。若想安装Unity,只需点击“Download”进行下载即可。如果你想要一次安装多个,它们会组成队列,按顺序下载。

一旦下载完成后,你便可以设置自己常用的Unity版本,也可轻松在项目视图中启动其它版本。

从技术上而言,这意味着你可以同时启动运行二个版本的Unity。但是为了避免本地冲突和其它未知问题,同一个项目应只由一个Unity编辑器打开。

安装结束后获取组件
在过去获取附加组件的最佳时机,例如增加特定平台支持、Visual Studio、离线文档和标准资源等,最好是在初始安装过程中进行。在之后做这些事会十分痛苦,你要么去重新运行下载助手(基本上需要重新安装),要么查找和安装独立组件来使用。如今当你通过Unity Hub下载一个版本的编辑器时,你可以轻松找到并添加所需的额外组件。

访问模板功能
随着Unity Hub的推出,我们也发布一个全新的功能,称作Templates(模板)。模板就是预设项目,用于快速启动常见项目类型的创建过程。当你开始一个新项目时,Unity中有不少默认设置需要更改。而且这些设置如何更改取决于你构思中的项目“原型”。模板能让我们针对目标游戏类型和特定视觉保真度进行批量预设。

这些模板中附带了优化过的Unity项目以及一些预制件和资源,用来帮助你开始进行项目开发。模板的其中一个优点是,它们能展示给用户难以发现的一些功能和设置。请一定要尝试使用模板功能,因为你或许会发现一些之前从未知道的新鲜而有用的东西。

本次发布的版本中有五个模板类型:

  • 标准2D项目
  • 标准3D项目
  • (预览版)小型游戏项目(用于移动端和低配机器)
  • (预览版)高分辨率项目(高质量视效,用于高配设备)
  • (预览版)小型VR项目

Unity Hub的未来
我们为你的Unity体验加入了很多改善用户体验的设计。管理安装版本和项目只是一个开始。我们想要让Unity Hub更为实用,让它成为开始使用和管理Unity的最佳工具。我们不打算仅仅停留在优化和简化流程上,我们还想让你的开发体验更为愉悦。有朝一日,我们希望Unity Hub能达成以下这些目标:

  • 单点登录:可以在任意机器上登录并访问你所有的Unity功能和资源。你将能够离线工作。
  • 实时活动:提供有关你的Unity项目、团队、服务和新闻的实用信息。
  • 整合访问:轻松发现并使用Unity的各项功能,例如教程和Asset Store资源商店。
  • 更好的上手体验:为Unity新用户提供一体化的使用体验。

小结
赶紧试用Unity Hub,相信它一定能带给你惊喜。如果你对Unity Hub或模板类型还有更多想法请在Unity中文官方论坛(Unitychina.cn)!

Unity 对象放置和物理效果

在Spotlight团队中,我们和优秀的Unity开发人员一起合作,深度挖掘Unity在游戏开发中的潜力。针对复杂图形、性能和设计方面的问题,我们看到了各种具有创新性的优秀解决方案。我们也看到了同样的问题与解决方案不断的反复出现。

 

最佳实践系列文章将探讨我们在与客户合作时遇到的一些常见的问题。这些都是我们的合作团队辛苦得出的经验和教训,我们很自豪能够和大家分享他们的智慧。这其中的很多问题只有在真正制作主机游戏、手机游戏、或者处理巨量游戏内容时才会出现。如果能在开发早期就将这些问题考虑进去,那么开发过程就会更轻松,而游戏也会更炫酷。

将对象放置到理想位置
尽管摆放对象是在Unity中最为常见的任务之一,我们还是看到不少团队为了如何能更好地完成这项工作而苦恼。要把对象排列完美,不让角色跑出世界,不让寻路出现障碍,并让各个物理对象能够放置在理想的位置,这的确不是件轻松的事。

Unity提供了一些工具来方便处理这个问题,这些工具各自扮演着不同的角色。尤其是在我们想要制作大量重复使用的内容,或是制作一张图放置了大量动态物理对象的场景,了解这些工具的使用方法则尤为重要。

使用正确的辅助工具
Unity中提供了变换、旋转和缩放工具,在Unity 2017.3中还加入了能同时拥有这三个功能的通用工具。这些小工具能在3D环境下修改游戏对象的变换属性。除此之外,还有2D环境下处理对象的矩形变换工具(Rect Transform)。

所有这些辅助工具的运作方式都与其所处的工作模式直接相关。如果将模式设为中心(Center),辅助工具将使用根据对象边界计算得出的对象中心点。这个计算结果是个近似值,所以在处理复杂对象时或许会感觉该中心点偏移了真正的中心点。

如果将辅助工具模式设为轴心(Pivot),辅助工具将使用对象自身引用框的原点(0,0,0)。这个轴心点是由创建该资源的作者在制作时设定的。通常需要将对象按照彼此相对的位置进行摆放时,我们推荐使用轴心模式,而且在制作资源时要留意轴心点的位置。

第二个切换按钮,全局/局部(Global / Local)切换按钮,确定了操作对象时所处的空间。设为全局(Global)意味着辅助工具将会对齐世界(x,y,z)坐标轴,而设为局部(Local)将会对齐对象自身的(x,y,z)坐标轴。通常我们需要在局部空间下处理对象。但如果我们想要让多个对象互相对齐,则会切换到全局坐标系,并使用网格对齐工具来排列对象。

吸附对象
在Unity中,最为直接的定位工具是按下CTRL键(Windows系统)或是Command键(OSX系统)来吸附网格。在我们通过坐标轴手柄(也就是分别为蓝、红、绿的坐标轴辅助工具)来移动对象时,按下吸附键会让对象根据当前网格大小计算的增量而移动,这个增量可以自行修改。

自动吸附设置(Snap Settings)菜单能为网格大小设置每个轴的数值,让我们控制旋转角度和缩放大小的吸附,还能将所选对象的当前变换属性近似取其最近的网格线。

吸附所有坐标轴(Snap All Axes)按钮在排列任意对象时十分有用。我们可以选择一组对象,将它们在坐标轴上吸附到网格,然后重新定位,这样就能把他们排列好了。效果如下图所示:

这个方法在处理规则几何体、大型关卡布局和设置碰撞块时十分管用。如果我们需要处理更为复杂的放置情况,则需要下面这些工具。

顶点吸附

在使用变换工具时按住V,变换辅助工具会切换为顶点吸附模式,显示为一个小方框。然后点击所选对象网格上的一个顶点,将其拖到光标下的任意顶点上。在处理任意网格的对齐时,尤其是要处理那些复杂的或是不存在碰撞的网格对齐时,这个方法很实用。

在上图中,不管是电线还是台灯都没有紧凑的碰撞网格,而且它们也都不是规则的立方体,所以它们不能用网格吸附或碰撞吸附处理。

如果需要这样放置多个游戏对象,我们也可以将顶点吸附模式保持在打开状态。按下Ctrl+Shift+V打开,按下Ctrl+V关闭。这样便不需要一直按住V就能顶点吸附多个对象了。

碰撞吸附
按下CTRL + SHIFT可以启用碰撞吸附。启用后,必须拖拽变换辅助工具中心的黄色小方框,而不是使用坐标轴控制工具。这样会让所选对象与光标下对象的碰撞体相对齐。

用顶点吸附或网格吸附来对齐网格在处理静态几何体时十分出色,但如果要处理动态对象,比如说互相穿透并在触碰后发射到空中的对象时,应该吸附到碰撞体而不是可见网格。

碰撞安置
如果有大量动态物理对象,或是十分复杂的关节系统,利用碰撞吸附来放置对象也许就不太合适。幸运的是,现在Unity编辑器中可以运行PhysX。它能模拟几秒的游戏时间,完成物理效果,然后保存完成时对象的位置信息。

当了解了何时和为何使用网格、顶点吸附、碰撞吸附时,我们将在关卡设计工作流程获得更好的开发体验。推荐开发者们多多尝试这些工具,例如:对比轴心(Pivot)和中心(Center)模式的区别,或是比较全局(Global)和局部(Local)模式的不同,这样就可以知道什么模式更为适合。花费在布置虚拟对象的时间越少,那么在开发时得到的乐趣就越多。