"そこ"から這い上がるブログ

プログラミングと電子工作が趣味でそこら辺のことを備忘録的に書きつつ這い上がっていこうといったブログ。そこ這い。

スマホのジャイロでカメラを回転させる方法

Unity+Androidスマホのジャイロに合わせてカメラを回転させたかったので色々調べてました。

Unityでスマホのジャイロ情報は

Input.gyro.attitude

で取得できます。
これをそのままCameraのtransform.rotationに入れると変な感じになりました。
やりたかったのは横持ちの時の回転なのですが、どうやら縦持ちの回転の様子。
ジャイロ機能とコンパスで見渡し操作【UUJ】
こちらのサイトを参考にQuaternionをかけることで横持ち用に

transform.rotation = Quaternion.Euler(0, 0, -180) * Input.gyro.attitude * Quaternion.Euler(0, 0, 180);

これで横持ち回転になりますが。机に置いたときに正面を向く感じになります。
横に持った時に前を向いたら正面になって欲しい……ので

transform.rotation = Quaternion.Euler(0, 0, -180) * Quaternion.Euler(-90, 0, 0) * Input.gyro.attitude * Quaternion.Euler(0, 0, 180);

こう

これで求めていた回転にできましたー

おいおいリセットかけられるようにしたりとか、起動時の向きを正面にするとかいれますかね。
カメラにアタッチすれば即ジャイロ回転になるコードを置いておきます。
スマホ横もちの時のカメラ回転をジャイロでできるようにするスクリプト。