Unity Google VR - 如何从安卓设备获取旋转、偏航角和俯仰角的值

3
我正在将我的一个简单项目转换成VR游戏。目前,它只是一辆摩托车,可以向前飞驰,玩家可以使用A或D(或左右箭头)来控制摩托车的方向。
以下是我目前的代码:
void Start () {
    cycleSphere = GetComponent<Rigidbody>();
}

void Update () {
    inputX = Input.GetAxis("Horizontal");
}

void FixedUpdate () {
    if (currentSpeed < maxSpeed)
        currentSpeed += acceleration;

    if (currentSpeed > 0)
        cycleSphere.transform.Rotate (0, inputX, 0);

    cycleSphere.velocity += transform.forward * currentSpeed;
}

我已经导入了GoogleVR SDK v1.70.0,并添加了预制件,这可以让我在手机上以VR形式查看游戏,甚至可以在不触碰代码的情况下四处张望。
我想使玩家向左或向右倾斜头部时,周期会朝着相应的方向旋转。我应该怎么做?我需要使用Input.Gyro吗?

不使用GoogleVR或任何插件:transform.localRotation = Quaternion.Lerp( transform.localRotation, InputTracking.GetLocalRotation(VRNode.CenterEye), Time.deltaTime); 不要忘记导入 UnityEngine.VR。虽然我建议使用GoogleVR或其他插件,因为Unity内置的VR API目前很小/简约,并且缺少很多功能。 - Programmer
@程序员,我正在使用GoogleVR。但是我不确定在哪里或如何使用手机旋转值。文档有点稀少。 - zack_falcon
我忘了提到我不使用GoogleVR,甚至根本不做VR。您可能需要在YouTube上检查或查看GoogleVR SDK附带的示例场景。 - Programmer
2个回答

1
我以前做过类似的事情,我在虚拟现实中制作了吃豆人游戏,倾斜头部会控制玩家移动(例如,将头部向左倾斜,使耳朵触碰肩膀,就会控制玩家向左移动,反之亦然)。
我使用了 Input.acceleration
例如,你可以这样简单地实现:
void Update()
{
    transform.Rotate(0f, Input.acceleration.x * acceleratorSensitivity, 0f);
}

基本上,你需要获取设备的X轴旋转(也就是头部倾斜),应用你的灵敏度(灵敏度越高,旋转速度越快),然后相应地旋转你的变换! :-)
我认为这种方法比使用陀螺仪更好,因为并非所有设备都包含陀螺仪,但大多数设备都包含加速度计(在基本水平上旋转屏幕)。

好的,我正在制作一个VR游戏,这需要陀螺仪。但是这个方法可行,谢谢! - zack_falcon
1
很高兴它能正常工作!只是想提醒一下 - 如果你要发布这个游戏,我建议在游戏中加入一个陀螺仪检查功能,以通知用户他们的设备是否具有陀螺仪。起初,我没有进行这个检查,我的游戏收到了很多负面评价,因为他们认为游戏已经坏了 - 实际上是他们的设备没有陀螺仪。如果你正在制作像这样简单的东西,并使用陀螺仪和加速度计,那么就没问题了,但是当你想要完整的360度头部倾斜时,我建议实现一个陀螺仪检查! :-) - Tom

0

您可以像这样使用主摄像机的 transform.eulerAngles

private float angle;

Update() {
    angle = transform.eulerAngles.z;
}

这将给你倾斜的角度,其中低值表示向左倾斜,高(~360)值表示向右倾斜。

在我最近的测试中,它似乎会提供高达+-10的值,具体取决于你看的位置,即使没有任何旋转。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接