Unity5.3のVR機能(インタラクション)

時間が空いてしまいましたが、
今回もUnity5.3 + GearVRネタです。

前回の記事で紹介しましたが、Unity5.3リリースから、
UnityのVR用公式チュートリアルも一新され、
Unity独自のVR機能もいろいろ追加されていました。

なので今回は追加されたUnity独自のVR機能について
纏めていこうと思っています。

※本記事はUnityの基礎知識及び、
VR開発機材(OculusRift / GearVR)を持っている方が対象です
※進め方はVR用公式チュートリアルに沿って進めていきます
http://unity3d.com/jp/learn/tutorials/topics/virtual-reality
※サンプルプロジェクトは以下からDLできます
https://www.assetstore.unity3d.com/jp/#!/content/51519

インタラクションVR

VRではプレイヤーの視界がヘッドマウントディスプレイで覆われてしまうため
プレイヤーの視線先の情報というものがとても重要な要素になっており、
Unity5.3以降ではそういった情報を容易に取得出来るスクリプトが用意されておりました。

VREyeRaycaster

このスクリプトはメインカメラに設定して使用します。
Update()がコールされる度にPhysics.Raycast()が実行され
任意のコライダーに接触しているかチェック、
ヒットした場合は「VRInteractiveItem」を探す動きをします。

VRInteractiveItem

VR上でプレイヤー(メインカメラ)とオブジェクトとのインタラクションを行うスクリプトで
以下のイベントを取得することが出来ます。

「見ている」
「見ていない」
「見ている + タップした」
「見ている + ダブルタップした」
「見ている + タップ領域に指が触れた瞬間」
「見ている + タップ領域に指が離れた瞬間」

VRInput

GearVRの場合、タップ、スワイプ、ダブルタップイベントを取得出来る
シンプルなクラスのようです。
※Oculus touchもこのクラスでイベント取得することになると思われます
(Oculus touchほしい…)

上記スクリプトを使用したサンプルシーンは
「VRSampleScene/Scenes/Examples/InteractiveItem」になります。

各オブジェクトに設定されているスクリプトを見ると
シンプルにインタラクションが行われているのが確認出来ると思います。

また、オブジェクトのセレクター関連についても便利な機能が提供されていました。

SelectionRadial
対象オブジェクトをタップし続けるとサークル上にアニメーションしていき
アニメーションが一回りしたところでイベント発動するセレクターです。
主にシーン切り替え用として用いられることを想定しているようです。

SelectionRadial

オブジェクトに「VRInteractiveItem」と「Menu Button」スクリプトを追加することで
挙動を確認することが出来ます。

SelectionSlider
対象オブジェクトをタップし続けるとゲージが横スライドするアニメーションが行われ
端まで到達したところでイベントが発動するセレクターです。
主に確認ボタン(OKボタン、ゲームスタートボタンなど)用として想定しているようです。

SelectionSlider

サンプルシーン「VRSampleScene/Scenes/Shooter180」を実行すると
どのようなシチュエーションで使用されているか確認出来ると思います。

まとめ
プレイヤー(メインカメラ)とオブジェクトの相互作用は以下の3つのスクリプトで
簡単に取得することが可能

・VREyeRaycaster
・VRInput
・VRInteractiveItem

また、シーン切替や確認ボタンも以下のスクリプトで簡単に実装することが可能

・SelectionRadial
・SelectionSlider

上記だけでVR上における一通りのUI周りは賄えそうだし
使い勝手もかなりよさげに思いました。