ジャイロ機能とコンパスで見渡し操作【UUJ】

iPadのジャイロとコンパスを利用して、仮想空間の室内を見渡すという処理をしたいです。

まず行ったのはジャイロの利用で、ここで得られた値をカメラにわたすという物。

(例)カメラに張り付けたスクリプト

(※これだけではカメラ位置が変な事になりますが)

続いて、現実世界の東西南北を重ね合せたいのですが、どうにもアルゴリズムの見当がつきません。
無論、コンパスの値を取得するぐらいはできるのですが、それをどのようにカメラ(あるいは仮想空間)で利用したらいいのかが分からなかったのでUnityForumを覗いた所ちょうどよさそうなスクリプトを発見しました。

http://forum.unity3d.com/threads/128493-Match-Unity-camera-with-iPhone-camera

しかし、スクリプトのまま使うと動きの検知が縦横逆になってしまっています。
例えばカメラを左右に振ると、上下に画面がスクロールするという感じです。
検知方向を正常に戻すか、他に何か良いサンプルがありましたら、教えていただけませんか?

そのコードはデバイスを横向きに持ったとき用のスクリプトなんだと思われます。
iPadを縦にして使ってませんか?
検証はしてないですけど、25行目の
Quaternion gyroOrientation = Quaternion.Euler (90, 0, 0) * Input.gyro.attitude * Quaternion.Euler(0, 0, 90);

Quaternion gyroOrientation = Quaternion.Euler (0, 0, -180) * Input.gyro.attitude * Quaternion.Euler(0, 0, 180);
にすれば良いかもしれないと、自分が昔実験したときのコードがそう言っています。
スレ主さんの
gyro.x *= -1.0;
gyro.y *= -1.0;
とやっていることは同じですね。
あと、コンパスの方も修正しないといけませんね。
コンパスは使ったことないので当てずっぽうになりますが、
_compassOrientation = Quaternion.Euler (0, 0, -180) * Quaternion.Inverse(Quaternion.LookRotation(flatNorth, -gravity)) * Quaternion.Euler (0, 0, 180);
でどうでしょうか?

おかげさまで上手くいきました。正常に動いたソースを残しておきます
 

Comments

comments

スポンサーリンク
336*280px