GoogleVRのGazeInputModuleを扱う
今回はお手軽VRの代表格Google Cardboardや、この秋発売が予定されているDaydreamのアプリをUnityで作れるGoogle VR SDK for UnityのGazeInputModuleについて扱おうと思います。
GazeInputModuleとは?
GazeInputModuleを使用すると視線の情報やトリガーの入力が取得できるようになります。
追加方法ですが、GoogleVR SDKがインポートされているなら、Add Component > GoogleVR > GazeInputModule に入っているはずです。Event Systemがない時は勝手に追加されます(uGUIのStandardInputModuleのGoogleVR版です)。
また、MainCameraにPhysics Raycasterをアタッチする必要もあるので、忘れずにつけておいてください。
IGvrGazePointerの使い方
GoogleVRに入っているIGvrGazePointerインターフェースを実装すると、今「何」が視界に入ったかや、トリガーの入力情報が取れるようになります。
どのGameObjectにアタッチしても構いませんが、GazeInputModuleのgazePointerに自身を代入する必要があります。
各メソッドの概要はこんな感じです。
OnGazeEnabled
GazeInputModuleが有効になった時に呼ばれます。
OnGazeDisabled
EventSystemが無効になった時に呼ばれます。
OnGazeStart
視線にColliderを持ったGameObjectが入った時に一回だけ呼ばれます。
引数targetObjectでそのGameObjectを取得出来ます。
OnGazeStay
視線にColliderを持ったGameObjectが入っている間ずっと呼ばれます。
OnGazeExit
GameObjectが視線から外れると呼ばれます。
引数cameraでCameraの情報が取得できるはずですが、なぜかnullしか返って来ません。
OnGazeTriggerStart
トリガーが押された瞬間に一度だけ呼ばれます。
エディタ上では左クリックを押した時に相当します。
OnGazeTriggerEnd
トリガーを離した瞬間に一度だけ呼ばれます。
エディタ上では左クリックを離した時に相当します。
GetPointerRadius
引数innerRadiusと引数outerRadiusでポインターの大きさを指定します。
ただ、うまく機能していないようで、innnerを0、outerを0.1とかに設定しておけば問題ないです。
IGvrGazeResponder
IGvrGazeResponderインターフェースを実装したスクリプトをアタッチすることで、そのGameObjectがプレイヤーの視線に入っているか等が取得できます。例によってColliderが必須です。
しかし、リファレンスには書いていないのですが、これ単体では機能せず、以下の用にEvent Triggerに登録してやる必要があります。なので、実際にはIGvrGazeResponderを使わずに、呼び出したい関数をEvent Triggerに登録するだけでも大丈夫です。
意味はないのですが、一応各メソッドを見ていきます。
OnGazeEnter
このGameObjectが視界に入った時に一度だけ呼ばれます。
Event TriggerではPointer Enterに相当します。
OnGazeExit
このGameObjectが視界から外れた時に一度だけ呼ばれます。
Event TriggerではPointer Exitに相当します。
OnGazeTrigger
このGameObjectが視界に入っている時にトリガーが押されると呼ばれます。
Event TriggerではPointer Clickに相当します。
まとめ
IGvrGazePointerは視線情報を取得したい時、IGvrGazeResponderはUIやリアクションを返すモノの作成に便利だと思います。
Google VR SDK for Unityはまだ作成途中で、日本語の資料も少ないですが、そんなに難しくはないので、Daydreamの発売に自作VRアプリを間に合わせたいですね!