※ これは 2016/05/31 Unity HoloLens Technical Preview ver.5.4.0beta14(Windows版) 時点の情報です
最新版では動作が異なる可能性がありますのでご注意ください
前回は Unity の標準 Button を HoloLens エミュレーター上で表示してみましたが、残念ながら操作できませんでした
今回は Unity が公式で公開している下記の VR サンプルプロジェクトの中に入っている UI スクリプトを利用してみたいと思います
https://www.assetstore.unity3d.com/jp/#!/content/51519
上記を Asset Store からインポートしたあと。下記の 2つのフォルダをまるごと前回のプロジェクトにコピーします
上記については Oculus や GearVR 用としてすでに紹介されていました
Unity5.3のVR機能(インタラクション) | TaoVisor
VREyeRaycaster
このスクリプトはメインカメラに設定して使用します。
Update()がコールされる度にPhysics.Raycast()が実行され任意のコライダーに接触しているかチェック、ヒットした場合は「VRInteractiveItem」を探す動きをします。
VRInteractiveItem
VR上でプレイヤー(メインカメラ)とオブジェクトとのインタラクションを行うスクリプトで以下のイベントを取得することが出来ます。
- 「見ている」
- 「見ていない」
- 「見ている + タップした」
- 「見ている + ダブルタップした」
- 「見ている + タップ領域に指が触れた瞬間」
- 「見ている + タップ領域に指が離れた瞬間」
VRInput
GearVRの場合、タップ、スワイプ、ダブルタップイベントを取得出来るシンプルなクラスのようです。
今回は VREyeRaycaster と VRInput を MainCamera に追加し、VRInteractiveItem を Button に追加してみます
まずは VREyeRaycaster と VRInput
MainCamera に VREyeRaycaster、VRInput のスクリプトを追加して、とりあえず VREyeRaycaster の Camera に MainCamera を、VR Input に VRInput をドラッグドロップしました
次に VRInteractiveItem
とりあえず Button に追加したのち、親の Canvas に「VRUI」という名前でスクリプトを追加しました
スクリプトの中身はこんな感じ
public class VRUI : MonoBehaviour { /// <summary> /// VR Interactive Item 適用ボタン /// </summary> [SerializeField] private VRStandardAssets.Utils.VRInteractiveItem button; /// <summary> /// ボタンのラベルテキスト /// </summary> [SerializeField] private UnityEngine.UI.Text buttonLabel; /// <summary> /// 初期処理 /// </summary> public void Awake() { this.button.OnOver += this.OnButtonOver; this.button.OnOut += this.OnButtonOut; this.button.OnClick += this.OnButtonClick; } /// <summary> /// 視線オーバーイベントハンドラ /// </summary> private void OnButtonOver() { this.buttonLabel.text = "Over"; } /// <summary> /// 視線アウトイベントハンドラ /// </summary> private void OnButtonOut() { this.buttonLabel.text = "Button"; } /// <summary> /// 視線クリックイベントハンドラ /// </summary> private void OnButtonClick() { this.buttonLabel.text = "Clicked"; } }
単に VRInteractiveItem の各種イベント発生時にボタンラベルを書き換えているだけ
さてこれで HoloLens エミュレーターで試してみました
だめだ~反応しない・・・どこか間違っているようです;
もっと試行錯誤が必要みたいですね