https://gyazo.com/94f1fd7ba2ea456b3500e3e87b9e8947

視線の検知

VR環境では、タップなどスマートフォンで一般に用いられる操作が出来ません。 そこで、Google VRでは、 ユーザの視線による操作を可能としたGoogle VR Pointer System が用意されています。 今回は、視線を利用したオブジェクトの選択を実現してみましょう。 事前に準備が必要なプロジェクトの作成やパッケージの導入などは、 Google VR SDKを利用した360°画像ビューアーを参考にしてください。

シーンの作成

シーンを新規に作成します。 ここでは、シーンの名前は[MenuScene]とします。 まずは、Google VR SDKを利用した360°画像ビューアーを参考に、 空のオブジェクトであるVR Cameraを作成し、直下にMain CameraGvrEditorEmulatorを設定します。

次に対象となるQuadオブジェクトをシーンに配置します。 Quadオブジェクトを配置するには、[GameObject]-[3D]-[Quad]を選択します。 Quadオブジェクトのインスペクターを開き、PositionZ座標5に設定しましょう。 また、新規にマテリアルを作成し、Quadオブジェクトに追加しておきます(マテリアルに関しては割愛します)。 シーンを再生すると下記のように表示されます。

https://gyazo.com/c3f40bd4fbddf7a69081f656f82b0195

視線の検知

上記で作成したQuadオブジェクトを視線に捉えていることを検出してみましょう。 まずは、ヒエラルキーにGvrEventSystemをドラッグ&ドロップで配置します。 GvrEventSystemは視線に関するイベントの包括的な処理を行います。 また、ヒエラルキーのMain Cameraの直下に、GvrReticlePointer を配置します。 GvrReticlePointerは、ユーザが見つめている一点をポインタで表します。 対象となるオブジェクトを見続けているとポインタが拡大します。 シーンを再生すると下記のように表示されます。 中央に視点を表すポインタが表示されていることが分かります。 現時点ではQuadオブジェクトを見続けてもポインタに変化はありません。

https://gyazo.com/d859cc5fff9a2bd88d78b65a23b7bc30

次に、視線を検出するためのスクリプトをMain Cameraに設定します。 Main CameraのインスペクターでAdd Componentを選び、Physics Raycaster を選択します(Physics Raycasterはスクリプトであることに注意)。

https://gyazo.com/faff19a2b6e19350e92d9925e8439f60

また、対象となるQuadオブジェクトにEvent Triggerを設定します。 QuadオブジェクトのインスペクターでAdd Componentを選び、Event Trigger を選択します(Event Triggerもスクリプト)。

シーンを再生すると下記のように表示されます。 中央にあるポインタがQuadオブジェクトを捉えると、 ポインタが大きな円に変形することが分かります。

https://gyazo.com/7e1fe35aa02b1a31347f117b95615cda

シーンの切替

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メソッドをそれぞれ設定します。

https://gyazo.com/54824c1feb448adbfe54657bd5e11f3b

シーンを再生すると下記のように表示されます。 ポインタをQuadオブジェクトで捉えると、2秒後にシーンを遷移しています。

https://gyazo.com/7da50bba9cad73a36f565be409f7c2bb

参考書籍