在本篇文章中,将开始设置Daydream控制器。将涵盖从将SDK添加到游戏,然后设置Daydream控制器在游戏中工作的所有内容。
正如可能会预料到的,Daydream控制器预制体并没有设置激光和指针。这就是为什么,今天将看看如果想要的话,如何启用它们。
让快速了解一下如何控制API,然后开始设置控制器。
已经在第42天稍微看了一下控制器,但让更仔细地看看这个。
如前所述,与Cardboard控制器相比,对于Daydream,有更多的输入可以工作:
主页按钮用于在不同的Daydream应用之间导航和重新定位控制器,所以不会有任何控制器围绕它。
有了这个,让快速看看如何使用Daydream控制器。
令人惊讶的是,找不到谷歌在他们的SDK教程中的说明!不得不回到第42天看看写了什么,令惊讶的是,文档中的说明被移除了!
幸运的是,复制了代码片段,并记下了应该做什么(过去的真聪明!)
除非有什么变化,将使用GvrControllerInput来获取控制器的输入。
在研究如何与游戏世界互动之前,让弄清楚如何与游戏互动!
需要做的第一件事是为游戏创建一个场景。
在Unity中创建一个新项目,称之为Daydream Controller Playground:
到目前为止,应该知道怎么做,特别是如果来自第7-8周。
按照第7-8周第1步的说明。这意味着导入GoogleVRSDK,切换到Android,创建环境,并在将GvrReticlePointer添加到游戏时停止。
此时,将添加特定的Daydream预制体。
将位于Assets/GoogleVr/Prefabs的GvrControllerPointer作为Player在游戏层次结构中的子项添加。具体来说,希望它是Main Camera的兄弟,不想将其作为子项添加,否则每当移动相机时,控制器也会被移动。
接下来,将GvrEventSystem预制体添加到游戏层次结构中,这将是能够用控制器的准线指向其他游戏对象所需的。
GvrControllerPointer包含2个子游戏对象:
现在已经设置了控制器,可能会发现让控制器工作涉及的一些问题:
为什么Daydream元素示例有效,而控制器不工作,不知道答案,因为它们都是相同的预制体,但让看看如何逐一解决这些问题,以便可以修复一切。
第一个问题是不知道控制器在哪里。除非有一个分屏,场景标签和游戏标签,否则很难定位控制器。
如何修复这个问题?在Daydream控制器上启用激光预制体。出于某种原因,GvrControllerPointer预制体的默认设置没有打开激光视觉。
这是必须要做的:
在游戏层次结构中,找到GvrControllerPointer > Laser,在GvrLaserVisual脚本中,有4件事需要改变。
完成后,应该有类似的东西:
现在当玩游戏时,应该能够看到一个激光瞄准器:
太好了!
现在可以看到控制器了!接下来的问题是控制器会掉到地上。这是因为玩家角色离地面太近了。
记得在某个地方读到,Daydream控制器是为大约5英尺高的人配置的,或者具体来说就是1.6米。
如何在Unity中得到这个值?事实证明,Unity使用的测量单位实际上是米!当将游戏对象的Y位置向上移动1时,在游戏空间中向上移动了1米。
让把玩家向上移动!
在游戏层次结构中选择Player,并将位置值更改为(0, 1.6, 0)而不是(0, 1, 0)。
现在相机和控制器(子对象)足够高,以至于控制器不会掉到地上。
如果实际上检查Daydream Element包并检查玩家位置,会看到它们也被提高到Y位置值为1.6(认为是从哪里得到这个数字的?)
接下来也是最后需要解决的问题,以使控制器工作,是为什么当提高它时,控制器会消失,因为它离相机越来越近。
这个问题令人头疼,但终于弄清楚了发生了什么。
问题在于Main Camera。具体来说,指的是Main Camera中的Camera组件中的Clipping Planes选项。
主要问题是Near选项设置为0.3。这基本上意味着一旦一个物体进入相机0.3单位以内,就不会再渲染它了。这正是控制器现在正在发生的事情。
那么如何修复这个问题呢?让减少这个数字!
在Main Camera中,将Near选项更改为1。
完成后,会有这样的东西:
当再次尝试使用控制器时,可以看到可以将遥控器更靠近,而它不会消失。
有了这一切,现在有了所有必要的配置,以便控制器开始编码。
希望在这篇文章之后,已经正确配置了游戏环境,以便可以开始编码。