読者です 読者をやめる 読者になる 読者になる

しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

【未解決】 HoloLens で VR 用の Unity サンプルスクリプトを利用してみる

※ これは 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

f:id:matatabi_ux:20160529132939p:plain

上記を Asset Store からインポートしたあと。下記の 2つのフォルダをまるごと前回のプロジェクトにコピーします

f:id:matatabi_ux:20160529133325p:plain

上記については Oculus や GearVR 用としてすでに紹介されていました

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

VREyeRaycaster

このスクリプトはメインカメラに設定して使用します。

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

VRInteractiveItem

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

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

VRInput

GearVRの場合、タップ、スワイプ、ダブルタップイベントを取得出来るシンプルなクラスのようです。

今回は VREyeRaycaster と VRInput を MainCamera に追加し、VRInteractiveItem を Button に追加してみます

まずは VREyeRaycaster と VRInput

f:id:matatabi_ux:20160529135059p:plain

MainCamera に VREyeRaycaster、VRInput のスクリプトを追加して、とりあえず VREyeRaycaster の Camera に MainCamera を、VR Input に VRInput をドラッグドロップしました

次に VRInteractiveItem

f:id:matatabi_ux:20160529134848p:plain

とりあえず Button に追加したのち、親の Canvas に「VRUI」という名前でスクリプトを追加しました

f:id:matatabi_ux:20160529135448p:plain

スクリプトの中身はこんな感じ

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 エミュレーターで試してみました

f:id:matatabi_ux:20160529140258g:plain

だめだ~反応しない・・・どこか間違っているようです;

もっと試行錯誤が必要みたいですね