いんでぃーづ

ゲームいろいろ、いろいろ自由

Unity : モバイル端末のコンパスを使うときに気をつけること

Android, iOS 端末では、端末についているコンパスを使うことができます。

ただ、マニュアルを見てると値がいろいろあって、ナンノコッチャ結局どれ使えばいいの、って状態になったので、少し調べてみました。

http://docs.unity3d.com/ja/current/ScriptReference/Compass.html

magneticHeadingとtrueHeading

マニュアルでは

magneticHeading
磁北極に基づく度単位の進行方向
trueHeading
地理的北極に基づく度単位の進行方向

と説明されています。
これはそれぞれ

magneticHeadingが地球の磁場が指している北、 trueHeadingが実際に北極のほうを指している真北

を指しているようです。

なぜ値が二つあるのか

国土地理院のサイトによると、

方位磁針のN極は概ね北を指しますが,厳密には北を指していません. つまり,地図上の北(真北)と方位磁針の北(磁北)は微妙にずれています. この真北と磁北のなす角度を偏角といいます.偏角は時間と場所によって異なります.

と、あります。

私が真北だと信じていた方位磁石は、実はちょっとずれていたのです。トホホ

trueHeading は偏角を補正した値だと思われます。

trueHeading の値を取得するには、Input.location.Start() を呼び出さなければなりません。
ロケーション情報を有効にすることで、偏角を補正していると推測できます。

ということで、Unityで方位磁石を作りたい時は、 trueHeadingの値を使用すれば真北を指せます。
実際の方位磁石をエミュレートしたい場合は magneticHeading を使うのもいいでしょう。

public class CompassSensor : MonoBehaviour {

    [SerializeField]
    Transform device;

    void Start () {
        Input.compass.enabled = true;
        Input.location.Start ();

        Debug.Log (string.Format("<b>精度</b>:{0}", Input.compass.headingAccuracy));
        Debug.Log (string.Format("<b>タイムスタンプ</b>:{0}", Input.compass.timestamp));

    }
    
    void Update () {
        Debug.Log (
            string.Format ("magneticHeading : {0}, rawVector : {1}, trueHeading : {2}",
                Input.compass.magneticHeading,
                Input.compass.rawVector,
                Input.compass.trueHeading
            )
        );

        // Transformの向きを真北にする
        device.rotation = Quaternion.Euler(new Vector3 (0, Input.compass.magneticHeading, 0));
    }
} 

rawVector

この値は地球の地磁気のベクトルの生データです。
ぶっちゃけ、この値単体で使うことはないので、無視してもいいでしょう。
ただし、姿勢制御などで使ったりするようです。

ちなみにUnity Remoteではコンパスの値を取得できないみたいです。アプリを書き込めばできました。
端末によってはできるかも。

・参考
http://docs.unity3d.com/ja/current/ScriptReference/Input-compass.html http://docs.unity3d.com/ja/current/ScriptReference/Compass.html http://vldb.gsi.go.jp/sokuchi/geomag/menu_01/


“Unity” and Unity logos are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere, and are used under license.


免責事項

当サイトの広告バナー、リンクによって提供される情報、サービス内容について、当サイトは一切の責任を負いません。

また、当サイトの情報を元にユーザ様が不利益を被った場合にも、当サイトは一切の責任を負いません。

すべて自己責任でお願いします。