2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Unity】スマホの傾きをGravitySensorで取得する

Posted at

本記事について

スマホを車のハンドルのように回転させて遊びたい。
そこで、以下のようにスマホを回転させたときにどっち向きにどのくらい回転したのかを取得する方法を示す。
iphone.png

環境

環境
mac os 12.5 silicon
Unity 2021.3.7f1
Input System 1.3.0
iphone

GravitySensorについて

GravitySensor

This is useful to control content by device orientation

ドキュメントより、スマホの傾きを取得したコンテンツを作れる

Compensate Orientation

rotation values reported by sensors are rotated around the Z axis as follows

本記事で扱うアプリはホームボタンが右にくるように固定している。

スクリーンショット 2022-12-16 15.36.42.png

そのためドキュメントより Values rotate by 270 degrees.となる。

アプリの向きによってGravitySensorで取れる値は変わるはずなのでそこは注意。

GravitySensorの値の取得

まずはInput Systemをインストールする。 ドキュメント

設定方法等に特筆すべきことは特にないので本記事では書かない。(必要そうであれば後から追記)

初期化用クラス.cs
using UnityEngine.InputSystem;
...

void Init()
{
    if (GravitySensor.current != null)
    {
        InputSystem.EnableDevice(GravitySensor.current);
    }
}

HogeController.cs
using UnityEngine.InputSystem;

...

void Update()
{
    var gravitySensor = GravitySensor.current;
    if (gravitySensor != null)
    {
        var enabled = gravitySensor.enabled;
        Vector3 gravity = gravitySensor.gravity.ReadValue();
        sensorLabel.text = $"enabled: {enabled}\n" +
            $"Gravity\nX={gravity.x:#0.00} Y={gravity.y:#0.00} Z={gravity.z:#0.00}";
    }
}

iphoneをおおむね水平にしたときの値が以下のように取れる。

IMG_5111.PNG

で、実験した結果gravity.xが以下の数値になることがわかった。
下が地面とする

状況 ホームボタンが下 ホームボタンが右 ホームボタンが上
gravity.x 1.00 0.00 -1.00
tate.png yoko.png gyaku.png

gravity.xの値の考察

スクリーンショット_2022-12-16_16_43_45.png
ホームボタンの位置におけるgravity.xの値の図。

おそらく青矢印で示した重力の向きと、ピンクで示したスマホの向きのベクトルの内積を取っている。
単位ベクトルの内積は同じ向きなら最大、逆向きなら最小の性質をもつ。
すなわちホームボタンが下(重力と同じ向き)なら1で、逆なら-1ということになる。

結論

前提: スマホ傾けるのは180度未満とする!

gravity.xが正 -> ホームボタンが下 -> 右に回転させている
gravity.xが負 -> ホームボタンが上 -> 左に回転させている

つまり、例えばスマホの傾きによってキャラクターを横移動させたい場合には

右への移動スピード * gravity.x

とすればスマホの傾きによって横移動が可能。

参考

【Unity】Input System(新しい入力システム)の使い方
Unityでモーションセンサーを使ってモバイルゲームを作る

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?