VR道を往く!スマートフォン用の表示で見るVR道を往く!VRとかUnityとかそういう話中心に。この広告は、90日以上更新していないブログに表示しています。AndroidiPhone、Androidで端末を向けた方向に合わせてカメラを動かすインタフェースをUnityで実装する方法をまとめてみます。ARアプリだと実際の方角に合わせてコンテンツを表示させたいケースも多いので、ジャイロだけでなくコンパスを使って適切にカメラ方向を合わせることを目指します。常識レベルの話かもしれませんが、いざ実装しようとして「あれ?どうするんだっけ?」となったり思いがけない罠に嵌ったりすることがあったので、備忘録がてら。ジャイロのみによる実装ではまずジャイロだけで見回し操作をしてみましょう。Input.gyro.attitudeで得られる値を少し加工してカメラのtransform.rotationに入れてやればよいです。Input.gyro.enabledをtrueにするのも忘れずに。以下のようなスクリプトをカメラに付けることで実現できます。}}これはとても簡単ですね。この辺りの話は以下の記事で考察されており参考にさせてもらいました。実は上のジャイロだけを使う方法でも何故か結構方角が合うのです...。若干の誤差はあるもののほぼ同じ方向になる。Androidだと一致する場合が多いように思います。この性質があてにできるなら、あえてジャイロだけで実装するのもありかと個人的には思います。trueHeading?実際の方位を知るにはInput.compass.magneticHeadingもしくはInput.compass.trueHeadingで向いている方向の北方向からの角度が分かります。しんほく)からの角度という違いです。磁北は実は真北から少しズレており、地図上での正しい方角を得るにはtrueHeadingを使う必要があります。trueHeadingを求めるには現在地が分かっている必要があるので、UnityではLocationServiceを立ち上げる必要があるのです。LocationServiceの開始方法は以下を参照。正しい値かどうかは保証できません。docs.unity3d.comLocationService、つまりGPSを使うとなるとまた一つ使用するセンサーが増えてしまうので、あえてmagneticHeadingで済ます、という考えもあります。コンパス自体の誤差もあるのでそこまでtrueHeadingにこだわる必要もないんじゃ?ということですね。今回ですが、これらは使いません...。いうと端末を下の写真のように見上げたりした時に検出される方角が逆になってしまう時があるのです。今回のような操作方法には相性が良くないなと。した時に方角が反転してしまう。よって今回はこれらのheadingではなく、Input.compass.rawVectorを使います。言うと端末から見た磁北の方向へのベクトルを表しています。実際の方角に基づいた端末の姿勢を求めることができます。compass.rawVectorを使った方法は以下のページでも紹介されています。rawVectorを使って求めた方角込みの姿勢に緩やかに補正するような処理をしてくれるコードです。いくつか嵌ったところもあるので補足していきたいと思います。+z方向を北にしたいと思います。そのために適当なタイミングで180度回転させます。Androidの場合には回転させてくれないので自分で変換する必要があるようです。すごいエラー値を出してくる恐れがあります。端末の起動直後や長時間のスリープから復帰した後などにエラー値を吐くことがあります。カメラのrotationがNaNになってしまって何も映らなくなったりします。いうコードを入れておきます。以上を考慮して最終的なコードはこのようになりました。これをカメラにアタッチしましょう。+zを北にするためQuaternion.Euler(0,0,180)を入れる。ない場合のみtargetCorrectionを更新する。コンパスはデリケートさて以上のコードを使えば正しい方角でのカメラ見回し操作ができるようになると思います。うまく動かない機種もあるかもしれません、その時はご容赦を。センサが正しく動いていればの話です。コンパスは特にAndroidでは立ち上げ直後など安定しない場合がある点に留意しましょう。いつまでたってもコンパスが正しく動かない場合は以下の方法を試してみると直る場合が多いです。support.google.comまた、コンパスなので当然磁気の影響を強く受けます。正しい方向が出ない可能性があるので注意しましょう。機種や環境によってはそれでも安定しない場合もあるかもしれません。そんな時は精度よりも安定性を重視し、コンパスをあきらめてジャイロのみで動かすことも選択肢にいれたほうが良いかもしれません。»プロフィールid:kaninabeVRとかUnityとかそういう話中心に。Nでない実機(Android、iOS)から利用する。(1)月別アーカイブ参加グループプログラミングVRリンクはてなブログブログをはじめる週刊はてなブログはてなブログProはてなブログをはじめよう!kaninabeさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。