这是Digital Compass还是Unity限制?

时间:2014-05-07 01:09:44

标签: android unity3d compass-geolocation digital-compass

我对移动设备的AR应用感兴趣,当然我想更好地使用指南针。

我唯一不得不反对的问题并不是指南针是多么抽搐。 (Angular Smoothing似乎很好地解决了这个问题)我的主要问题是当设备保持垂直时,罗盘值开始吓坏了。导致屏幕指南针在整个地方翻转。我不具备移动应用程序开发方面的丰富经验,因此我不确定导致此问题的原因是什么,如果它是Unity问题还是仅仅是数字罗盘的限制。我知道其他应用似乎可以在任何方向上使用指南针,但这对我来说都是愚蠢的新事物。

我确实尝试过以8的数字移动手机。我必须使用的设备是Nexus 4.

using UnityEngine;
using System.Collections;

public class Compass : MonoBehaviour {

// Use this for initialization
void Start () {
    Input.location.Start ();
    Input.compass.enabled = true;
}

// Update is called once per frame
void Update ()
{
    var heading = Input.compass.trueHeading;
    transform.eulerAngles = new Vector3 (0, 0, heading);
}
}

1 个答案:

答案 0 :(得分:1)

序言:)

首先,我不是专家(不幸的是)我会谈论的主题。但是,我仍然决定分享我的想法。

理论

问题可以通过以下方式推广。你想要一个连续的函数,它采用一个3D矢量(在你的情况下是设备方向)并返回另一个与原始矢量正交的矢量。理论说(参见hairy ball theorem)对于某些论证,函数将返回零向量。如果这样的功能是指南针,当设备垂直定向时会返回零向量(如果您使用过普通的指南针,这会很自然)。

实践

  1. 有时您希望自己的应用能够分辨出手机背面(后置摄像头)指向的哪个方面。
  2. 或者甚至你想要组合方法:

    • 如果手机是平放的,请显示手机顶部指向的是什么。
    • 如果手机是垂直方向的,请显示手机背面指向的内容。
  3. 在这两种情况下,除罗盘外,还需要使用陀螺仪。