Google VR SDKで視線の検知
視線の検知
VR環境では,タップなどスマートフォンで一般に用いられる操作が出来ません. そこで,Google VRでは, ユーザの視線による操作を可能としたGoogle VR Pointer System が用意されています. 今回は,視線を利用したオブジェクトの選択を実現してみましょう. 事前に準備が必要なプロジェクトの作成やパッケージの導入などは, Google VR SDKを利用した360°画像ビューアーを参考にしてください.
シーンの作成
シーンを新規に作成します. ここでは,シーンの名前は[MenuScene]とします. まずは,Google VR SDKを利用した360°画像ビューアーを参考に, 空のオブジェクトであるVR Cameraを作成し,直下にMain CameraとGvrEditorEmulatorを設定します.
次に対象となるQuadオブジェクトをシーンに配置します. Quadオブジェクトを配置するには,[GameObject]-[3D]-[Quad]を選択します. Quadオブジェクトのインスペクターを開き,Position の Z座標 を5に設定しましょう. また,新規にマテリアルを作成し,Quadオブジェクトに追加しておきます(マテリアルに関しては割愛します). シーンを再生すると下記のように表示されます.
視線の検知
上記で作成したQuadオブジェクトを視線に捉えていることを検出してみましょう. まずは,ヒエラルキーにGvrEventSystemをドラッグ&ドロップで配置します. GvrEventSystemは視線に関するイベントの包括的な処理を行います. また,ヒエラルキーのMain Cameraの直下に,GvrReticlePointer を配置します. GvrReticlePointerは,ユーザが見つめている一点をポインタで表します. 対象となるオブジェクトを見続けているとポインタが拡大します. シーンを再生すると下記のように表示されます. 中央に視点を表すポインタが表示されていることが分かります. 現時点ではQuadオブジェクトを見続けてもポインタに変化はありません.
次に,視線を検出するためのスクリプトをMain Cameraに設定します. Main CameraのインスペクターでAdd Componentを選び,Physics Raycaster を選択します(Physics Raycasterはスクリプトであることに注意).
また,対象となるQuadオブジェクトにEvent Triggerを設定します. QuadオブジェクトのインスペクターでAdd Componentを選び,Event Trigger を選択します(Event Triggerもスクリプト).
シーンを再生すると下記のように表示されます. 中央にあるポインタがQuadオブジェクトを捉えると, ポインタが大きな円に変形することが分かります.
シーンの切替
Quadオブジェクトを2秒間見続けるとシーンを切り替えるようにします. QuadオブジェクトのインスペクターでAdd Componentを選び,Net Script を選択します(C#で記述する). ここでは,スクリプト名はCntrol Sceneとします.
スクリプトには下記のコードを記述します. enterPointerメソッドはポインタがオブジェクトを捉えたときの処理, exitPointerメソッドはポインタがオブジェクトから外れたときの処理です. シーンの遷移はUpdateメソッドに記述します. ポインタが2秒以上オブジェクトを捉えたことを条件に, Panorama Viewerという名前のシーンに切り替えています.
上記で定義したメソッドをQuadオブジェクトのEvent Triggerに設定します. Pointer Enterには,enterPointerメソッド, Pointer Exitには,exitPointerメソッドをそれぞれ設定します.
シーンを再生すると下記のように表示されます. ポインタをQuadオブジェクトで捉えると,2秒後にシーンを遷移しています.