虚拟现实正在蓬勃发展-Valve,HTC,三星和Facebook都将在不久的将来推出高端虚拟现实硬件。在软件方面,数十家大型工作室正在开发新硬件,他们所有人都自由地承认他们不知道自己在做什么。
这就像DOOM和Wolfenstein成立初期一样再次。没人知道一款优秀的VR游戏会是什么样子,并且开放给独立工作室成为主要参与者的领域。如果您想制作视频游戏,那么这可能是您有史以来最好的机会。
因此,假设您想参与其中。这些工具比以往任何时候都更加易于使用,并且几乎都是免费的。但你从哪儿开始呢?本指南将为您提供入门所需的所有工具和信息-完全免费。
准备好了吗?
您需要什么:
要开始制作VR游戏,您只需要三件事:
除此之外,您还可以使用其他所有功能需求是免费的。在软件方面,我们将使用:
设置工具
首先,让我们开始安装所有内容。下载并运行Unity和GIMP的安装程序。这应该是不言自明的。首次打开Unity时,它将提示您创建一个帐户:这样做,并确保记住您的用户名和密码。
在Unity内,创建一个新项目(请确保创建一个“ 3D"项目,而不是“ 2D")。将项目目录设置为“我的文档" /“我的项目"。
现在,使用浏览器进入Unity Asset Store,并使用相同的凭据登录。这将使您能够访问开发人员工具和资源。使用上面的Primitive Plus和SteamVR链接,找到软件包,然后单击左上角的“在Unity中打开"按钮。由于这些是免费资产,因此您无需支付费用-其他资产可能不是免费的,因此请当心。按照出现的提示,将这些软件包导入Unity。您应该在“项目"子菜单下看到新文件夹。他们可能要花一分钟时间才能下载,因此请耐心等待,直到完成后再关闭Unity。
Unity中的脚本
如果您要使用Unity,则非常容易使用曾经编程过。如果您不熟悉C#,请花一些时间来熟悉语法(尝试这份出色的交互式教程)。如果您以前从未进行过任何编程,那么也请执行此步骤,然后花一些时间来解决欧拉计划中的难题。这将帮助您熟悉编程中要解决的问题以及所需的解决问题的能力。
一旦您对使用C#解决问题感到满意,我建议您花一些时间使用出色的初学者教程探索Unity。您也可以对Unity使用我们自己的速成课程。我将简要说明我使用的所有组件,但是那里有很多有价值的信息,可以在您尝试更大的项目时很好地为您服务。
要使用Unity脚本,您首先需要一个附加对象。在编辑器中,您可以通过以下三种方式之一创建3D对象。
如果您导入它们,或将它们拖到资产文件夹中,它们将显示在“项目"子窗口中。您可以通过选择“场景"标签并将其拖动到游戏中来将它们放入游戏中。然后,您应该看到它们出现在世界上。左上角的控制开关可让您缩放,旋转并根据自己的喜好放置它们。通过在“层次结构"选项卡中将对象的名称相互拖动,可以将它们彼此“父化"(使它们一起旋转和移动)。
一旦在场景中存在对象,您就可以附加一个或多个脚本。这些脚本使对象栩栩如生。它们可以使枪支射击,子弹移动以及人物走路和说话。
要添加脚本,请在``场景''或``层次结构''选项卡中选择要控制的对象。 “检查器"标签将更改为显示附加到相关对象的所有组件。一个典型的对象看起来像这样,并包含一些元素:
从检查器选项卡中,您可以使用底部的“添加组件"按钮添加新脚本。在这里,您可以添加已经创建的脚本,也可以创建一个新脚本。将语言更改为“ C#",输入所需名称,然后点击“创建"。这将向对象添加新的(空白)脚本。双击“检查器"选项卡中的脚本名称,将在Unity的代码编辑器MonoDevelop中打开脚本。
在新文件中,您将看到“开始"和“更新"功能。首次创建对象时运行“开始"。在那里进行所需的任何设置。 ``更新''在每一帧运行,并且是大多数逻辑应该去的地方。
要访问对象的组件,可以键入'gameObject.Renderer','gameObject.rigidbody'等。取决于您要控制的元素。在“开始"功能之前声明的公共变量将在编辑器中可见,从而可以更轻松地进行调整。有关如何与各种系统元素进行交互的更多信息,请查阅Unity手册。
这是我创建的一个简单脚本,该脚本使对象基于正弦波有节奏地扩展和收缩。在Unity中创建一个多维数据集,添加一个脚本,然后将该脚本复制到“ Update"方法中。保存它并按编辑器中的“播放"按钮后,您应该看到多维数据集正在扩展和收缩。确保已定位“相机"对象,以便可以看到该对象!
启用VR模式
现在,我们已经设置了基本的Unity场景,让我们开始吧显示在您的VR耳机上。我们将使用SteamVR插件,该插件将在最终发布时同时呈现给Oculus Rift和HTC Vive。这是开发两者的一种简便方法。
在“项目"标签中,转到SteamVR文件夹,然后打开“预制"子文件夹。您会看到几个可供使用的实体。将“ CameraRig"和“ SteamVR"预制件拖到场景中。这些已经设置好了您需要的一切。将它们移到场景中(位于同一点)。移动它们,以便他们可以看到多维数据集。现在,删除原始(非VR)摄像机对象–场景中有多个活动摄像机会触发一个错误,因为Unity不知道您要使用哪个摄像机。
现在,如果您尚未安装Oculus Windows Runtime,然后连接DK2。
重新启动计算机。在系统托盘中,您会看到Oculus eye徽标。如果单击它,则可以选择打开“显示模式"选择器和配置实用程序。将显示模式设置为“直接"。然后,打开Oculus Configuration实用程序。 验证您可以看到演示场景。 如果不能的话,请在继续之前对其进行调试。
r / Oculus是此类事情的好资源。演示场景应平稳运行,并跟踪头部的旋转和位置,没有抖动或重复图像。
如果无法正常工作,请检查相机是否可以看到您,并且正确插入。还要验证视频卡是否足够强大,并且后台没有正在运行的密集型应用程序。
验证VR头戴式耳机正常工作后,请打开团结并按播放按钮。我们设置的简单场景应该显示在您的VR耳机上!恭喜:您已经制作了第一个VR演示!
制作您的第一个VR游戏
到目前为止,非常简单-但这并不是一个特别令人印象深刻的演示。为了让您了解制作一个更具参与性的项目的感觉,我将向您介绍制作我已经完成的,名为 AsteroidVR 的完整VR街机游戏的过程。
这不是《天际》,但它是一款您可以玩的完整游戏,带有有效的图形和完整的机制。制作花了几天的时间,大约是在概念验证演示的水平上,当您尝试使用不同风格的游戏时,会做很多事情。
游戏很简单足够:您将驾驶一艘被困在一个大房间内的船。飞行器将以恒定速度移动。您将能够操纵和射击,但不能停下来。房间将缓慢地充满随机大小的“小行星",它们将在房间周围漫无目的反弹。您的工作是尽可能避免撞到这些小行星或墙壁。您将可以发射小行星,但如果用完了,弹药的充电速度会很慢。
这是基本原理。让我们开始吧。因为这只是一个演示,所以我们将使用多维数据集和球体之类的简单图元(使用Primitive Plus资产)来制造资产。
这是我创建的飞船。
我承认,它的确看起来很像叉车,但可以在此演示中使用。
在建造驾驶舱时,请务必在用户的视野中放置一些明显的结构,特别是在外围。通过为用户提供一些固定的元素,从而减少晕动症,从而减少他们正在移动的感觉。这样一来,他们的大脑就可以更轻松地应对内耳所报告的运动不足。
我不得不尝试几种座舱配置,然后才发现没有一种会让我感到不适的。如有疑问,请添加更多撑杆,然后将相机移回原位。注意规模! Unity中的一个单位等于VR中的一米,因此请注意您要创建的元素的大小。在VR中制作出大得可笑的物体很容易,结果可能令人不安。
建造完船后,创建一个包围它的立方体,并把所有物体作为父级船的原始。这将提供其碰撞盒和运动中心。将“刚体"添加到外部立方体,并禁用渲染器(通过在检查器中取消选中它)。确保设置了刚体,以便同时禁用“运动学"和“使用重力"。向每个舰船原语添加其他刚体,这一次将它们设置为“运动学",但是关闭“使用重力"。
将“ CameraRig"和“ SteamVR"对象移至驾驶舱并将其定位使用者的头部应在船内的位置。我使用了另一个免费的Unity资产(人形机器人)来确保位置正确对齐。将它们作为外部立方体的父对象–这将使它们与对象一起移动。
现在编写船脚本!这是我创建的两个脚本-Vehicle Controller和Vehicle Destroyer。第一个读取用户的输入,并向船提供推力,使其移动。第二个检测船何时与标记为“岩石"的东西相撞,然后结束游戏。作为一个有趣的额外功能,它还可以将飞船分解成多个组件,让您看到它们在碰撞时飞走了。该脚本将创建一个对象数组,您需要在编辑器内部填充船中的所有原语。
该脚本还显示一些在死亡时会弹出的指令。创建一个TextMesh GameObject,并将其设置为“您死了!射击,重新启动!"将此TextMesh放在驾驶舱内,将其作为船的父级,并禁用其渲染器组件。然后,将其拖到检查器中VehicleDestroy脚本的“ instruction"变量中。该文本通常是不可见的,但是在您死后会重新出现。
小行星
接下来,我们将创建小行星。这是我最终得到的小行星,它是由一些粘合在一起的基本体和标准着色器组成的。没什么复杂的,但是看起来很不错。
我添加了一个刚体,并将其标记为“岩石"。如果您不熟悉统一标签系统,请查阅相关手册。页。基本上,标签可让您为对象分配特殊属性,在碰撞期间可以检测到这些属性,从而使脚本知道它们正在与之交互。在这种情况下,标签会导致飞船物体检测到它被危险物体击中。
现在编写小行星脚本。此处的脚本是“ AsteroidInit",它完成两件事。
Arena
太好了!存在游戏的两个基本要素。接下来,竞技场。它可以是您想要的任何形状,但请确保它很大。转小圈容易使人生病。直飞是相对无礼的。将所有墙壁标记为“岩石",以确保飞入它们的船只均被摧毁。这是我最终得到的竞技场:
您会注意到,墙壁具有我在GIMP中制作的简单占位符纹理。在大多数情况下,我设计游戏时都具有无质感的美感,以简化操作。但是,我发现很难告诉我何时接近撞墙,因此它们会出于游戏目的而获得纹理。我还向舞台上添加了一个粒子发射器,向其中填充了暗淡的,长寿命的静态粒子。这样一来,当您不在物体附近时,就可以更轻松地判断出自己的移动方式。幸运的是,竞技场是相当被动的,因此它本身不需要任何脚本。
最后,创建一个基本体(我使用了空心圆柱体)并将其放在一堵墙上。
这将是您的小行星产卵器。将此脚本附加到它。您会注意到,该脚本声明了一个“ Asteroid" GameObject变量,该变量应在编辑器中可见。将小行星对象拖到编辑器中。这样一来,它就可以以每秒一秒钟的速度生成无限数量的小行星,从而使游戏的难度曲线逐渐增大。将您的原始小行星放置在很远的地方,以避免其意外毁坏或引起问题。
HUD和Gun
在这一点上,游戏的最基本形式基本上是可玩的。现在,我们将添加一些辅助功能,使其更深入。该脚本(附加到“ TextMesh")将跟踪您存活的时间。第二个脚本将与文件对话以确定您的高分,当您重新启动车辆时,该分数将由车辆处理程序写入文件中。现在,您有了一个简单的计分板系统,为玩家提供了一个进球。将这些网格物体固定在容易看到的驾驶舱内。
最后,我们需要安装用户的枪支。向船上添加一个“枪支"对象(不需要很复杂),然后将此脚本拖到其上。您需要链接项目符号对象,该对象可以是具有刚体和“子弹"标签的任何对象。使其颜色鲜艳,因此可见。同样,请将其放置在较远的位置,以免发生相互作用。最后,您需要进行弹药显示。将此脚本添加到另一个文本网格中,然后将其锚定在易于查看的座舱内。
微调
就可以了!至此,游戏的所有基本要素均已完成。现在该进行测试了。您可以更改小行星的大小范围,竞技场的形状和大小,飞船的速度,弹药的数量,补给速度和冷却时间。您可以试验船的处理方式。如果您愿意并具备3D建模技能,甚至可以用真正的资产代替我的程序员的美术作品,并以此开发出精美的游戏。重要的是要进行大量实验,找出对您来说感觉良好并且对测试人员来说舒适的东西(最好是VR新手并且还没有胃口的测试人员)。
如果您想查看整个Unity项目并将其弄乱,您可以在此处下载。如果您只想玩我最终版本的游戏,可以在这里下载。
构建您自己的演示
如果您遵循自己的教程,请深入研究当您发现不了解的内容时,就会发现Unity中基本VR游戏的创建非常不错。
也就是说,VR游戏开发与传统游戏开发有很大不同,因此,我将给出一些一般性建议设计舒适和充分利用媒体的VR体验。
首先,也是最关键的一点,要尊重用户的头部运动。不要缩放,扭曲,改变视野或以其他方式破坏基础。 Oculus和Valve麻烦很多,无法对这些东西进行微调以免让人生病。除非您有一些感知心理学家,否则您没有资格篡改它。别!同样要小心,切勿将其关闭。不要创建没有头部跟踪的菜单。没有什么比将巨大的物体粘在头上十秒钟或更长时间更快地使您感到不适了!
在同一脉络中,要小心动作。使人感到不适的主要因素是当他们的眼睛感觉到内耳没有感觉到运动时。通常,保持动作缓慢而稳定。加速度应该是瞬时的,并且旋转应该最小化。当必须进行旋转时,请为用户提供周围视觉的固定参考点。如果可以,请构建完全不动的游戏。您可以在一个房间里或使用微小的物体(例如,以塑料军人为规模的实时战略游戏)做很多有趣的事情,而使这些体验变得舒适愉悦要容易得多。
很多人在开始开发VR内容时,会自动希望将内容附加到用户的头部,例如军方的Heads Up Displays。不幸的是,事实证明效果不是很好。当您的眼睛注视着世界上任何遥远的物体时,靠近您的头部的物体将变成像素外的混乱焦点。此外,专注于非常靠近的物体会引起眼睛疲劳。
为避免这种情况,请尝试将您的UI尽可能地融入现实。看看《死亡空间》这样的游戏来寻找灵感。您会注意到,在上方的Cemo AsteroidsVR中,所有UI都固定在驾驶舱中。因为它在您周围的空间中,所以所有UI都有意义并且易于查看。
在相关说明中,请注意文本。当前的VR头戴式显示器分辨率很低,尤其是当您考虑到它们覆盖了多少视野时。这意味着文本可能很难阅读。尽量少依赖它。您所拥有的文本应足够大,以在正常查看条件下可读性强。请记住,您的某些球员可能是老年人或视力障碍者!错误太大了。
请记住,VR非常密集。 DK2需要以3D,75 fps的速度运行1080p。消费者Rift和HTC Vive都将以更高的分辨率和帧速率运行。未能达到这些帧速率将导致闪烁的双视。这非常令人不安,而且是一张迷失方向和眼睛疲劳的单程票。
因此,您需要比平时更加谨慎地对待性能。这意味着要减少多边形计数,并尽量减少昂贵的图形效果。使用简单的模型,将灯光的数量减少到最少,禁用动态阴影,并尝试使用相同的材质使尽可能多的对象成为可能。您还应该在检查器中将所有不会更改或移动的对象标记为“静态"。这使Unity可以更轻松地将它们一起批处理并节省性能。在可能的情况下,通过为游戏选择卡通化的美感,使这些限制成为游戏设计的一部分。通常,如果您可以消除视觉效果而又不损害游戏,那就去做。
这个经验法则的一个例外是抗锯齿。锯齿(由计算机图形的离散特性引起的锯齿状伪影)在每只眼睛中的发生方式不同,从而导致3D效果令人不愉快的崩溃,从而可能导致眼睛疲劳。尽可能使用尽可能多的抗锯齿功能(我建议使用MSAA),并尝试避免使用具有高频视觉细节的纹理(例如,树叶,细光栅或位于远处的复杂纹理)。
有些视觉效果即使您可以负担得起,一般来说,这种效果也不适合VR。
在创建艺术品时,请牢记所有这些内容,
如果您发现关闭所有这些图形效果后,游戏看起来有些单调,请尝试使用光照贴图和伪造的环境光遮挡。光照贴图将光照直接烘焙到贴图上的纹理层中,这对于不动的事物看起来都很棒,并且可以为您的世界增加很多深度和坚固性。对于动态对象(例如角色),请考虑使用“阴影斑点"纹理创建环境光遮挡。这不是完全现实,但是它确实可以使它们扎根于世界,而且在图形上非常便宜!
随着时间的流逝,这类黑客活动将不再那么需要,但是目前您将需要尽可能多地利用它们以节省性能。
我最重要的建议是放弃您的先入之见。 VR并非我们所有人都认为它将在90年代出现。事实证明,现实具有许多人无法预见的优势和局限性。在纸上听起来很棒(例如 VR Halo )在实践中似乎是令人迷惑,令人作呕的混乱。一些最受欢迎的VR体验确实是很奇怪的东西,例如 Job Simulator ,这是一个设置在厨房的沙盒游戏。
VR是一种全新的媒介,没有人完全理解规则呢。在传统的视频游戏中,我们几乎知道如何制作FPS,RPG和掩护射击游戏。这些基本流派被钉牢。有最佳实践。任何制作的新游戏都是渐进的改进,但通常不是新类型。在VR中,没有什么新的类型。该媒体的基础知识还没有被发明出来。没有人知道他们在做什么。
这令人难以置信,但确实意味着您必须保持灵活性。如果您有个很棒的主意,那就去做吧!立即!尽快完成原型制作,并查看其是否可行。但是,愿意让实验失败。如果您的想法不好玩,或者使测试人员感到不适,请将其扔掉并尝试一些新的东西。
每周甚至每天制作一个新游戏,直到获得金牌。您制作的原型越失败,发明真正酷的东西的几率就越高。制作怪异的游戏。制作真正奇怪的游戏。没人知道什么是行得通的,什么是行不通的,所以撒个宽广的网。
所以您可能会惊讶地发现它真棒。
因此,出去那里,制作一些游戏–最重要的是,玩得开心!