VR迷宫计划

在浏览古代罗马遗迹的同时,听听Italo Calvino的故事。

项目目标

我的任务是设计一个应用程序原型,以交互方式讲述故事。 用户将在设置周围移动,以收集与故事主题相关的对象。 收集每个对象后,用户将听到故事的其他部分。 收集到确定数量的对象/故事后,将出现一个键,允许它们前进到另一个场景。

由于我对功能有明确的目标,因此我决定在分配任务的基础上增加一些功能:

1)一种功能,可跟踪可收集硬币的数量并在收集到一定数量的硬币后触发操作。

2)一旦达到收集项目的目标,便激活键的功能。

3)一种功能,当用户单击可收藏的硬币对象时,附近雕像GameObject上的音频源将被激活。

以上这些功能将在我进一步开发故事讲述应用程序时为我提供帮助,并将适用于我可以开发的各种其他应用程序。 在下一节中,我将详细讨论函数的脚本。

脚本编写

目标中的硬币计数和事件触发

Lurony的本教程为创建此功能提供了清晰的说明,非常棒。

我将ObjectsToCount脚本附加到每个硬币预制件,并将CountObject脚本附加到GvrEventSystem。

当收集了所有硬币时,我使用了CountingObject脚本来显示密钥。 下一部分将详细描述此功能。

按键激活/停用

我在CountingObject脚本中使用了If Else语句来控制键GameObject的激活和停用。

如果收集了所有硬币,则该钥匙将被激活并出现在场景中。 否则(如果还剩硬币)该键将被停用。 该方法将被称为每一帧。

用户单击后隐藏键

在用户单击场景后,在我的Key脚本中使用Destroy方法从场景中删除键之前,上述激活方法非常有效。 然后,Unity抛出一个错误,指出CountingObject脚本仍在每帧都引用它(销毁的关键对象)。

我通过向用户隐藏密钥而不是销毁密钥来解决此问题。 在Key脚本中,我使用了transform.scale方法而不是Destroy。

门解锁

该Unity官方教程在此功能方面非常有用。

最重要的是教程中有关在脚本之外为GameObjects创建引用的信息。 通过使用FindGameObjectWithTag和GetComponent,我可以为放置在键GameObject上的交互脚本创建方法,该方法更改了放置在门GameObject上的布尔变量脚本。

其他GameObject上的声音触发

Unity文档页面上的答案为我提供了有关在GameObjects之间创建引用的有用信息。

我将PlayAudio脚本附加到场景中的硬币上,并将AudioSource组件添加到场景中的雕像上。 通过将父雕像GameObject拖放到“播放音频”检查器字段中的“声音播放器”脚本对话框中,我将特定的AudioSource与特定的PlayAudio脚本相关联。

当用户单击硬币时,它将在3D空间中触发关联的AudioSource。

关卡设计

导入的游戏对象

该关卡中的所有GameGames雕像都是大英博物馆扫描并从sketchfab.com下载的古代罗马雕像。 3d OBJ网格文件每个都带有一个PNG纹理文件。

我在MeshLab中准备了网格。 首先,我在XYZ轴上正确对齐了网格。 其次,我使用“ Quadratic Edge Collapse Decimation(with Texture)”过滤器将网格中的面数减少到原始面的0.2%(1,000,000到2,000)。

然后,我在Blender中打开编辑的网格,并确保已附加PNG纹理。 如果还没有,我可以通过在图像纹理对话框中加载PNG文件来附加纹理。 然后,我将网格另存为BLEND文件,并将BLEND和PNG纹理文件复制到Unity项目的Assets文件夹中的Mesh文件夹中。

这种将高分辨率纹理附加到抽取模型的方法使GameObjects在不牺牲性能的情况下看起来很优质。

景观纹理

我创建了一个Terrain对象,并升高了土地的某些部分,以使关卡更自然。 我尝试添加树,但是在测试高LOD,低LOD甚至广告牌模型之后,我发现它们需要太多的处理能力来渲染。 我最终从景观中删除了它们,以确保可接受的帧率。

等级图

我创建了一张地图,鼓励用户进行探索,方法是不将收集钥匙的路径设置为直接路径。 从用户遇到的第一个雕像可以看到一个雕像,这鼓励用户在叉子处朝该雕像右转。 如果他们采取正确的行动,他们将错过通往狗雕像的道路,最终将不得不回溯以到达它。 当面对相反的方式时,用户将清楚他们错过了需要探索的部分关卡。

关键信标

我将钥匙放在一个非常高的紫色栏中,以唤起人们在地图上任何地方对该对象的注意。 因此,即使用户不得不回溯到狗雕像获取最后的硬币,一旦收集硬币,他们也会注意到紫色的列。 他们可以沿着圆柱走到喷泉旁出现的钥匙。

声音

我在文本到语音应用程序中输入了Italo Calvino的“ Invisible Cities”部分,并将录制的音频放入了雕像GameObjects的AudioSources中。

难点

按键激活/停用

获得激活并出现在场景中的钥匙是一个重大的难题。 经过数小时的研究和思考,我发现需要创建IF ELSE声明。

本教程对引导我最终解决方案非常有帮助。

将Poof Prefab实例化为硬币的位置

《 Unity官方教程》对解决这一难题非常有帮助。

在屏幕上显示收集的硬币数量

在游戏模式期间,我能够使UI显示在Unity编辑器中工作,但在手机中却无法。 我只是没有时间弄清楚这一点。

我相信我已经接近了。 我在看下面的教程,但是没有时间将其方法应用于我的程序。

注释

作为第一学期的最后一个项目,Maze项目为我奠定了Unity的良好基础,随着我继续完成Nanodegree计划,我将继续以此为基础。 我还发现,我可以通过参考Unity文档和在线教程来学习新技能。 我不敢相信,自从开始这些课程以来只有几个星期。 我很高兴开始第二学期!

学分

非常感谢我咨询过的所有教程的作者! 感谢大英博物馆的精彩扫描。 最后是Italo Calvino撰写的精彩著作。