在Unity中开发VR游戏
介绍
我的名字是 Vladimir Koščica,我是 Escape Simulator (ES) 游戏项目的艺术主管。游戏由Pine Studio开发。该工作室成立于 2014 年,做我们都喜欢的事情——益智游戏。我们之前的游戏——FARAWAY 和 BIRDCAGE——是我们最大的赢家,FARAWAY 是年度最佳休闲游戏,而 BIRDCAGE 在所有主要的 Apple 零售店都有展示。
在逃生模拟器上工作
现实生活中的密室激发了游戏的灵感。我们通过允许您在现实生活中不能(或不允许)做的事情将游戏玩法提升到另一个层次:粉碎花瓶并查看里面的东西,烧掉盒子而不是找到钥匙,拖动家具,打破锁 – 所有这样做是为了解决具有挑战性(和乐趣!)的难题。
房间设计为可以在单人模式下享受,但当更多玩家加入合作体验时,它们也会大放异彩。
八人已经在这个项目上工作了两年。该团队由 4 名艺术家、3 名程序员和一名音频专家组成。我们还与当地的密室逃脱设计师在房间和拼图设计方面进行了很好的合作。
AR/VR 的物理学
AR 和 VR 从一开始就是 Escape Simulator 的主要功能,游戏将在 PC 和 Steam 发布后面向这些平台推出。AR/VR 中的玩家将拥有全方位的运动。他们将能够蹲下身子,走到物体后面,从任何角度看它们,这对沉浸感产生了奇妙的影响,并且是该类型中的一个重要区别。
VR 和 AR 中的物理与 PC 上的工作原理类似,主要区别在于与它的交互。将基于屏幕的交互转换为 3D 是很自然的,因为游戏是为这些类型的动作而设计的。例如,在 AR/VR 环境中投掷比在标准 PC 控制中更自然。
在 VR 中,体验必须流畅以避免不适,因此我们不得不调整处理物理的方式,这样 CPU 就不会太昂贵。在游戏中,我们没有与物体完美对齐的碰撞器,但我们使用更容易处理的碰撞器形状来近似。事实证明,这是一个很好的解决方案,因为我们在物理方面遇到的错误更少,工作流程更快。
对于物理模拟,我们使用 Unity 的内置物理引擎 Physx。尽管我们必须自己处理一些边缘情况,但事实证明它是一个可靠的开箱即用的解决方案。对于 VR,我们必须增加 Physx 更新关卡物理状态的频率,只需点击几下即可。
设计环境
在为 AR/VR 设计时,我们必须遵循一个主要的约束或规则,那就是步行区域的 3×3 米尺寸。这样做的原因是我们希望玩家能够在一个典型的房间里玩游戏。此外,我们尝试将大部分互动谜题放在蹲伏高度或正常站立高度上。
在项目开始时我们有一些很棒的想法,比如爬楼梯或站在一些移动的平台上,但我们对结果并不满意,所以我们不得不放弃这些想法。但是我们的程序员能够完成的一件很酷的事情是在 AR 模式下通过您的手和腿与游戏对象进行交互。这是新事物,我们迫不及待地等待玩家尝试。
与对象交互
除了较大的场景元素外,房间里的大多数物品都可以捡起来。
当您拿起物品时,您可以与它进行进一步的互动。这个手提箱就是一个例子。你可以把它翻过来看看上面有没有什么提示,然后你就可以打开它捡起里面的东西。然后,手提箱中的每件物品都可以经历相同的交互集。
调整灯光
NGSS 是一个 Unity 照明插件,它使我们能够创建优化的高质量软阴影,这对我们至关重要,因为我们试图在所有房间中营造出舒适的感觉。带有清晰阴影的苛刻照明会干扰该目标。
至于灯光技术,我们只用一个实时灯光就取得了很好的效果。主要原因是它可以让玩家在移动设备上获得更流畅的游戏体验。所以一盏实时灯(宽聚光灯)总是在房间的中央,向下射以产生良好的接触阴影。这里的诀窍是降低这个主光的强度,这样烘焙灯就可以发挥作用,因为它们主要负责创造情绪。我们在 Unity 中完成了所有烘焙。房间墙壁和大型固定模型都被烘焙到只有一个 1024 像素的光照贴图。动态对象(您可以拾取、移动、旋转的对象)无法进入静态光照贴图,因此它们从光照探针获取光照信息。
营造氛围
正如我所提到的,我们希望玩家在所有房间都感到舒适。所以图形必须遵循这个方向。我们决定采用轻微的风格化,以将自己与经典的、有时是冷的建筑渲染区分开来。为了实现它,使用了三件事。第一个是我们之前提到的光照/阴影部分。第二个是模型的边缘。我们需要使用加权斜面来夸大厚度。使边缘更圆润有助于我们获得整体舒适感(与阴影一样,尖锐的形状主要被认为是不吸引人的或危险的,因此我们避免使用它们)。
第三件事是使用具有更高饱和度的简化纹理。我们在纹理中删除了一层逼真的小细节,因为我们觉得它太分散注意力了。从表面去除不必要的视觉噪音非常简单,只需在原始纹理上叠加清晰的颜色层,从而减少其中的细节。使用图层调整调整饱和度。这三件事足以让我们觉得我们从现实主义中退缩了。
多人游戏
多人游戏也是设计《逃生模拟器》时的核心支柱之一。我们希望这款游戏给人一种现实生活中的逃脱游戏的感觉,其中包括能够与您的朋友一起在那里。正因为如此,关卡的设计方式使得多人可以为最终的逃脱做出贡献。
多人游戏开发在我们的开发周期中稍晚一些。我们设置了核心系统并做了一些关卡。但是由于一直的想法是“我们需要多人游戏”,我们编写了系统和代码,因此最终添加它更容易。
话虽如此,这并不是一个完全顺利的旅程。在第一次多人游戏迭代中,我们使用了第三方网络解决方案。它相对容易实现,我们随附了游戏的演示版。但随着时间的推移,解决方案的裂缝变得明显。它充满了我们不支持或不想支持的不同类型项目、工作流程的代码,而且可能最重要的是,当我们遇到错误时,我们不得不花费大量时间来查找和修复它。
为了解决这个问题,我们开始研究游戏中的网络解决方案。在我们的解决方案中,我们有两层:一层专门用于传输网络数据,一层使用数据并将其应用于游戏。对于传输,我们使用 Steam 的点对点网络解决方案。随着时间的推移,我们将游戏交付到其他平台,传输层会发生变化,但就目前而言,Steam 网络对我们来说是一个很好的解决方案。我们需要实现的主要关系是我们的网络堆栈和物理引擎之间的关系。在 Unity 或一般术语中,在玩家之间同步物理状态并不是一项微不足道的任务。在实现中,我们使用插值或平滑姿势变化和外推来尝试猜测下一个最佳物理状态。出于性能原因,我们不会在每一帧中同步物理,
结论
感谢大家花时间阅读有关我们工作流程的这篇文章,我们希望您觉得它在某种程度上有所帮助或启发。此外,请务必在Twitter和Facebook上关注我们以获取有关游戏和工作室的更新。您也可以加入我们的 Discord。并且不要忘记在 Steam 上将Escape Simulator列入愿望清单。