リアルとバーチャルの間

気まぐれに書いてます。

Oculusをつけている時と外している時の判定をジャイロで判断させてみる

Oculusをつけている時と外している時の判定をとりたいと思うんだけども
デバイスくっつけないで何か判定できないかな?っと思った時にジャイロで判断させようと思います。

ただ、Oculusをそこら辺に置いておいても微妙にジャイロが判定されてしまうので
回転値(0,0,0)で考えると失敗してしまいます。
そこで、Quaternion.Angleを使って角度が0.1よりも動いたのか、それとも動いてないのかでOculusをユーザーがつけているのかどうかを判定する事にしました。

判定するカメラは、OVRCameraControllerの子にあるレフトカメラを使いました。
※サンプルとしては、適当にカウントアップさせて値を超えたら別シーンへ移動としています。

using UnityEngine;
using System.Collections;

public class OculusGyroStatus : MonoBehaviour {
    //セッティング
    private Transform CameraLeft_; 
    //角度
    private Quaternion prevRotation;
    //動いてるのか、止まっているのかを判断する為のカウント
    private float count = 0;
    //スタート時間からの差分をはかる為のフラグ
    private bool flg = false;

    void Start () {
         //OVRCameraControllerの子にあるレフトカメラを参照にする
        CameraLeft_ = transform.FindChild ("CameraLeft");
    }

    void Update () {        
        //現在のレフトカメラと保存している回転角度を測定して何度なのか調べる
        float angle = Quaternion.Angle(CameraLeft_.rotation, prevRotation);

        if (angle < 0.1f)
        {
            if (flg == false)
            {
                count++;
                if (count >=  1000)
                {
                    NextScene();
                }
            }

        } else
        {
            count = 0;
        }
        //カメラの回転を保存する
        prevRotation = CameraLeft_.rotation;
    }

    void NextScene(){
        flg = true;
        Application. LoadLevel("nextscene");
    }
}