本文首发“ Unity官方平台”公众号
近期,我们正式向大家介绍了由 Unity 研发的首款游戏《Gigaya》。该游戏目前仍处于开发阶段,在开发完成后,游戏本体包括其资产和源代码都将免费向所有 Unity 用户开放下载和体验。Steam 玩家也能从 Steam 商店免费下载游戏。
《Gigaya》项目的重点并非某个特定功能或产品,而是全面了解广大创作者的需求,改进 Unity 生态系统以惠及所有从业人员。虽然该游戏尚未面世,但是我们已经针对一些问题制定了有趣的解决方案,比如制作新工具或使用替代技术来解决开发难点。
《Gigaya》在开发过程中着眼于三大重点:趣味的游戏玩法、沉浸式的世界和游戏发行。让我们跟着创作团队一起来看看《Gigaya》的开发幕后。
趣味的游戏玩法
在游戏玩法方面,我们着力挖掘出趣味性,而其中的重点在于团队内部的通力合作和交流,创造出有趣的角色原型。这个过程依赖于需要快速迭代游戏原型,摒弃无效的理念。
《Gigaya》的高级角色美术师 Juan Puerta 讲解了探索游戏趣味玩法的过程。
Juan:大家好,我是此项目的高级角色美术师 Juan Puerta,主要负责制作角色。我会向大家介绍我们在制作的角色中的经验。
首先,我想说创作一个游戏角色是极具挑战性的,这一点大家应该感同身受。这个过程需要很多人的共同参与,在细节上反复推敲。
以我们的主角 Wondu 为例,最开始的时候我毫无头绪,所以尝试了很多不同的设计,直到设计出了一个我觉得很有趣的形象。然后我就立即向团队成员展示了这个角色,然后逐步给他增加了纹理、简单的动画,大家反响很好。整个团队从一开始就全体参与,开了很多场会,讨论是否要给他配一把枪、是否要赋予他某种能力,以及我们该如何实现这些功能。
确定创意方向的过程十分耗时,虽然每次讨论的都是一些细节,但是这些细节与游戏玩法设计息息相关,需要反复推敲。我一共做了 4 个版本的 Wondu,相当于 4 个可用于游戏的角色。
很感谢与我协助角色制作的主管,他鼓励我勇往直前,尝试以往绝不会选择的方向,比如使用更鲜亮新颖的颜色,这些尝试最终得到了团队成员的认可。
接下来就是将角色拖放到 Unity 中,我把 Wondu 先拖入了 Substance,发现效果不错,然后我把它置入了 Unity。此时我面临的主要问题在于,无法创建着色器,毕竟我是一名美术,而着色器的开发依赖于程序。
我们团队的 Ciro 主动联系了我,说他们制作了着色器视图工具。这个工具简直是太棒了,我仿佛化身为程序员,自己就能创建专属着色器。这帮我节省了大量时间,让我能够专注于自己的工作。
我利用这个着色器先后创建了皮肤、头发着色器,可以灵活调整并且自由尝试不同的模式。使用头发着色器,我不仅可以调整发色,还能够了解角色在移动时,光线对发色的影响,从而在游戏照明条件下找到最理想的效果。诸如此类,这个工具实在是帮了大忙。
当然,作为一个美术,它背后的运行逻辑我一窍不通。在《Gigaya》的制作过程中,程序开发的工具对我很有帮助,程序的工具加上美术的设计,大大提高了角色原型的创作。
接下来我想展示一下 Wondu 在游戏中的劲敌,也是一个很棒的模型。打造它的过程中,我试用了团队研发的 LookDev 程序。在我制作这个模型的时候,他们在同步研发 LookDev,所以就让我试用一下。
试用体验让我非常惊讶,因为用起来实在太棒了。在这个程序中,我只需拖放然后添加材料,就能让角色动起来。这是我工作流程中的重要环节,因为我需要以尽可能理想的方式向创意主管展示我制作的角色。
有一次为了演示,我拜托同事 Jason 制作了一段动画。我把他制作的动画添加到程序中,拖入角色,然后角色就动了起来。
这对我来说实在太神奇了,无需繁琐的步骤就能做出这么精良的动画效果,我还可以查看其中的光照设置,确保角色在任意光线下的效果都很好。
沉浸式的游戏世界
创建好角色后,我们还需要给 Wondu 创建一个世界,让他能在其中展开精彩的探险。
打造游戏世界的重点不一定是制作效果绝佳的图形或精美无比的环境,重点在于打造生动自然的沉浸式世界。在这个世界里,一切都是生动自然的,草地、树叶、机械,以及它们与角色间的交互,这些细节会让玩家爱上游戏并沉浸其中。
Juan:我们希望打造一个极具沉浸感的游戏世界,即便角色不在其中时,这个世界本身也生机盎然。我们一开始研究了大量图像,接着制定了一些概念,团队内部也开了很多会,大家都努力想做出独具个性的游戏。
要营造沉浸式体验,游戏世界必须保持统一且合情合理,不能在其中随意添加元素。因此我们制作了美术指南,明确了各种规则,所有的设计需要遵守一定的规则。有了这份指南,大家就能更轻松地朝着同一个方向前进,而不是毫无目的地随意发挥。
我们是个小型团队,团队中只有 2 位环境美术师,他们创建了一个汇集不同资源的精美资源库。只需要将不同资源组合起来,就可以搭建起一个世界,这个过程就像是在拼乐高,非常有趣。
大家在屏幕上看到的这些结构,它们彼此毫无关系,但基本上是用相同的信息制成的,资源库对整个项目帮助很大。
角色有了,静态的世界有了,该如何让游戏中所有的事物都动起来呢?接下来就是程序的主场了。
Ciro:大家好,我叫 Ciro Continisio,是本项目的技术主管。我们也是个小团队,现在共有 5 位程序员。
我们的主要挑战是将 Juan 刚刚介绍的所有内容,在技术层面让它们成为现实。
先从角色讲起,项目初期做出的决策之一就是使用物理角色控制器,我们希望 Wondu 融入游戏世界,并非仅仅是一个四处移动的胶囊碰撞体,而是一个能影响游戏世界并被游戏世界所影响的角色。
我们的程序员 Andy Touch 很快就开发出了控制器,接着要将它与动画匹配起来。我们和 Juan 刚刚提到的动画师 Jason 共同进行开发,他为各个倾斜度创建了不同的工作周期,我记得他创建了 4 个周期,还为静止状态单独创建了 1 个周期,然后让它们彼此融合,这是个很有趣的方法。因为我们其实并未选择反向动力学,虽然它显然是一个更合乎逻辑的解决方案,但是动画师 Jason 觉得反向动力学会略微削弱作品的表达力。
沉浸感的另一个重要方面是音效,如果 Wondu 在不同表面行走时,发出了不恰当的声音,就会让玩家“跳戏”。因此我们的程序员 Amel 开发了一个小工具,它能附着在渲染材料表面,添加 1 个我们称之为物质类型(Substance Type)的字段。它的主要功能是定义材料表面的类型,然后再向下计算,根据表面播放适当的音效。
植被显然是游戏世界中的另一重要部分,因此技术美术师们确保了所有植被都能与角色进行交互。可以看到当 Wondu 在草地上行走时,草会弯折,这对营造沉浸感至关重要,不仅是为了视觉上的美观,也是为了让人感觉他真的身处游戏世界,让人觉得他的确与这个世界融为一体。
他们用了些小技巧,大家可能都有所了解,比如根据角色位置,移动顶点位置;还用蒙版,在角色周围创建类球体,从而向外推动顶点……
沉浸感的另一个重要组成部分是我们使用的粒子,我们可以在 Unity 中使用各种技巧和工具,Wondu 在助推器中使用混合 Shuriken 粒子,此外还有很多其他粒子。
水也是重要元素,它形成了地面上的绿洲,我们在此使用了 Unity 技术美术师 Andre McGrail 亲手制作的自定义着色器。
他做了个带 Gerstner 波浪的着色器,其中也包含漂浮对象,它们会因推力而上下浮动。它们其实是游戏对象,其中所含的刚体推动 Wondu 上下浮动,这就形成了闭环。这不仅是为了呈现视觉效果,而是回归角色并影响角色,我们会看到角色以真实的状态移动。
游戏中当然还有各种生物,我们制作了几种野生生物,比如头野兽形似猪獾,它力大无穷,能把 Wondu 推开;还有像松鼠的啮齿类生物,他们怕人,遇到 Wondu 就会躲。
要让角色移动起来,我们必须选择如何移动,我在项目初期决定使用状态机。除了很优秀的动画外,我们还利用状态机以有趣的方式融合不同行为,玩家难以察觉其中的过渡,Unity 利用状态机制定了解决方案。
我利用状态机以可视化的方式处理复杂的敌人,从而轻松理解其结构。其实你会发现状态机的重点并非状态本身,而是状态间的过渡。如有必要,你可以从任意状态过渡至任意状态,因为这就是生物的行为方式。无需预先设定好的行为流,而是能瞬间转至下一个行为,可以看到这些状态间有很多连线,状态机有助于我以可视化的方式理解并控制这些联系。
在状态内部,我同样选择尽可能少用一般本地节点,仅将它们用于计时器和随机性,还有 if 等逻辑语句。我基本上是在赌这个方法会起效。
我选择将所有元素都包含在代码中,然后使用公共函数,公共函数会生成节点,这样我就可以用这些节点在状态机中创建行为。但它其实是代码,所以我随时都能返回代码,修改并改进代码,我觉得这也会让程序变得更稳定些。因为现在一切元素都包含在代码中,这就大幅降低了出现失误以及状态机发生故障的概率,让我们能快速推进工作。
如果工具能加快你的工作速度,你就有余裕犯更多错,做出更多尝试并剔除更多无效内容。我认为这是打造优秀游戏的首要关键,重点在于精简,而非盲目给游戏添加更多内容。
为了让角色动起来,我决定使用 NavMesh。人们通常将 NavMesh 视作偏固定的解决方案,但只要用几个小技巧就可以让角色依旧保持真实自然的状态。
我们选择了这个目前处于实验状态的软件包,Unity 制作的人工智能导航(AI Navigation)有了这款工具,我们就无需使用 1 个巨大的 NavMesh,而是可以将 NavMesh 作为游戏对象,这样就能将它们四处移动。
这个功能极其实用,因为我们甚至可以将 NavMesh 拖至吊车上。吊车是游戏中的旋转结构,这样 NavMesh 就可以随吊车移动,我们可以让这些会飞的敌人绕吊车飞行,同时让它们保持在 NavMesh 的覆盖范围内,一切都自然整合为一体。
我们还制作了一个自定义 NavMesh 碰撞平面,我在 Polybrush 中创建了这些对象,给它们建了模,将所有屋顶连了起来,然后烘焙了 1 个 NavMesh,令会飞的敌人停留在空中.
我觉得最终效果很赞,它们总会栖停在这些高杆上,接着它们会起飞,飞入开放空间。但其实它们仍在 NavMesh 的覆盖范围内,它们会稍微上下盘旋一会儿,看上去仿佛漂在空中,十分真实自然,同时也很稳定可靠。每当美术团队想变更环境,我只需点击烘焙,Unity 会自动处理边界情况,这个功能特别棒。
我们还做了些造型像蟹的野生动物,我称它们为 Chinchinllas。它们也在状态机中,原理十分简单,它们会四处爬动,当 Wondu 靠近时它们会逃回我称为避难所的地点。关卡设计师可将此地点置于地图上的任意位置,只要在 NavMesh 上就行了。
游戏效果相当好,当你游戏中打斗、跳跃、做任务时,这些野生动物会对你的行为做出反应。这种行为虽极其简单,但能让你更深切地感受到游戏世界的生机,我的介绍大致到此结束。
以上就是我要讲的全部内容,接下来将由 Ben 介绍我们的第 3 个支柱,即发行。
游戏发行
游戏发行的重点在于明确游戏开发周期,整体流程中的痛点,开发人员通常能用 Unity 制作出优秀的游戏,随之而来的挑战在于如何让玩家体验游戏。过去,我们在推广普及游戏开发方面表现出色,如今我们想更进一步,为大家提供全生命周期的帮助。
Ben:我知道发行是很多人都会经历的棘手部分,它对我们也十分重要,我首先想说明一下我们为什么要正式发行这个项目。
大概一年多以前,《Gigaya》项目正式启动,许多成员都来自别的组,开发目标也不一样,比如让更多人下载某种工具,或者增加某条视频的点击量……设定目标并没有错,实际上这提升了我们技术开发的速度,但也带来了新的挑战。如果团队或个人专注于实现某个想法,视野就难免变窄,过于集中在一点就会失去大局观。
在座的各位应该都是开发者,我相信你们在工作中肯定遇到过这种问题,有了好想法就在上面花了过多时间。我们也犯过这种错。
如果你的团队给力,或者制作人懂行,那他们也许会及时把团队拉回游戏开发;又或者,他们觉得这个功能真的很棒,愿意再给你一点研发时间进行深入探索。
就我们团队来说,最重要的目的就是把游戏做出来正式发行。要达成这个目标,首先得组建团队。
正如大家所见,我们团队里的岗位和职责跟一个中小型游戏工作室的配置一致,我们的运营方式也和其他工作室一样。但在 Unity 内部,我们的运营方式还是独一份,团队建立之初大家都非常激动,我们的任务就是做一些能真正帮助到用户的实事。
问题慢慢地演变成了想法,想法则引发了讨论,讨论后自然要用实验来验证,验证出的答案 也不完全都是成功案例,就像 Ciro 说的失败是常事。只要迭代够快,我们就能找到较为正确的解法。
很多人都觉得我们做的是样本游戏分发给开发者们,帮助大家掌握其中要点并应用到自己的项目里,但这充其量只是《Gigaya》项目的副产品。
我们希望更深入地理解各位开发的需求,切身体验大家的工作流程。新工具和新功能确实很吸引人,但我们要牢记游戏开发的本质,呈现最好看的图形效果或者达到最佳性能只是其中的一个目的。更重要的是,游戏开发是一种人文体验,过程中满是各种创造性的试验,不管你最后创造出了什么,无论成功还是失败,这个过程和技术一样重要。因此,我们希望通过这次的试验,争取让大家的担子轻一点。
亲历了这段旅程之后,我们对自身的优缺点有了更深刻的理解,也把相关的反馈直接推给了功能开发团队,希望能给他们提供一些技术角度之外的视角,了解产品在游戏实际制作过程中的表现。此外,我们坚持以 Unity 团队的身份协作,旨在提升游戏开发过程的体验,惠及所有开发者。
迄今为止,我们跟很多团队都有深度合作,我们并不是要挑 Bug,而是要了解在游戏开发的过程中,我们的解决方案是否能够彻底解决问题,比如工具是否足够高效,促进美术和程序间的协作,等等。
以通用渲染管线(URP)为例,我们在项目初期就决定用通用渲染管线(URP),所以在推进的过程中会和 URP 团队紧密合作,我们喜欢或不喜欢的点都会及时反馈给他们。
BTW,无论是想要选用哪种渲染管线,大家一定要尽早做决定,因为这会影响项目的整体进程。
我们希望让这个项目长远地发展下去,完整地体验大家的开发流程,这个项目的意义就在于此。我们之后会提供各类深度剖析和开发日志等内容,不断拉近和社区的距离。
《Gigaya》是我们在 Steam 正式发行的第一个样本项目。我们这一次想要体验游戏的全生命周期,不是做完就万事大吉了,我们要一路把它做到能在商店上架的程度,发现开发者们的共有痛点,最好还能解决现存的问题。
《Gigaya》绝对值得大家的期待。