HoloLensアプリ開発手順 備忘録(カーソル、エアタップ)


はじめに

すでに沢山の方が開発手順の記事を記載してますが、個人の知識整理として投稿します。
※2019/05/15時点の記事になります。

1.Unityでプロジェクトを作成する
2.プロジェクトにMRTKをインポートし、Mixed Realityプロジェクト用の設定にする
3.Input Managerを追加する
4.カーソルを追加する
5.エアタップを認識させる

環境

Unity:2017.4.27f1 Personal(64bit)
MRTK:HoloToolkit-Unity-2017.4.3.0-Refresh.unitypackage

MRTKをインポートし、Mixed Realityプロジェクト用の設定にする

Unityで3Dプロジェクトを作成したら、メニューバーから「Assets」→「Import Package」→「Custom Package...」を選択する。

ファイル選択ダイアログが表示されるので、ダウンロードしたMRTKのパッケージを選択し、インポートする。

インポートするとメニューバーに「Mixed Reality Toolkit」が追加されるので、「Mixed Reality Toolkit」→「Configure」→「Apply Mixed Reality Project Settings」を選択する。これを選ぶとMixed Reality用のセットアップを行ってくれる。

Input Managerを追加する

Input ManagerはHoloLensの入力系を制御するオブジェクトとのことで、ジェスチャの認識やカーソル、視線などを制御できるようになるとのこと。

1.ProjectウインドウのHoloToolkitにあるInputManagerオブジェクトをHierarchyウインドウに追加する。
 InputManagerオブジェクトはHoloToolkit/Input/Prefabs/の配下にある。

カーソルを追加する

視界の中心にカーソルを表示する。
PCで言うところのマウスポインタの役割を果たす。

1.ProjectウインドウのHoloToolkitにあるCursorオブジェクトをHierarchyウインドウに追加する。
 CursorオブジェクトはHoloToolkit/Input/Prefabs/Cursor/の配下にある。

2.HierarchyウインドウでInputManagerを選択し、InspectorウインドウにInputManagerの情報が表示されている状態にする。

3.HierarchyウインドウのCursorオブジェクトを、Inspectorウインドウの「Simple SinglePointer Selector(Script)」内の「Cursor」にドラッグアンドドロップする。

これでカーソルが表示される。

エアタップでオブジェクトに干渉する

オブジェクトに対しエアタップジェスチャによる干渉する。

1.エアタップで干渉したいオブジェクトに対し、C#スクリプトを追加する。
 Hierarchyウインドウで干渉したいオブジェクトを選択し、Inspectorウインドウの下にあるAdd Componentを押下。
 new scriptを選択してC#スクリプトを追加する。

2.C#スクリプトでゲームオブジェクトにIInputClickHandlerインターフェースを追加する。
 手順2で追加したC#スクリプトを開き、オブジェクトにIInputClickHandlerインターフェースを追加する。

using UnityEngine;
using HoloToolkit.Unity.InputModule;    // InputModuleをusingで追加しておく

public class GestureTest : MonoBehaviour, IInputClickHandler {  // IInputClickHandlerを追加

    // OnInputClickedイベントを追加する(これがエアタップされた時にイベントハンドラとして呼ばれる)
    public void OnInputClicked(InputClickedEventData eventData)
    {
        // ここにエアタップされた時の処理を記述(以下はオブジェクトのカラーを赤に変えている)
        GetComponent<Renderer>().material.color = Color.red;
    }

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }
}

上記の様にIInputClickHandlerを追加することでOnInputClicked()が実装される。
エアタップするとこのOnInputClicked()がイベントハンドラとして呼びだされる。

オブジェクトをエアタップすると

色が変わる(エアタップというジェスチャを認識し、イベントハンドラの処理が行われた。)