HoloLensアプリにKeyboardを組み込む

こんにちは。
クラウド事業本部コンサルティング&テクノロジー部の酒井です。

HoloLensアプリ内で文字入力が必要な場合、Keyboardを出したいと思ったことはないでしょうか?
D3DアプリではHoloLensのキーボードをそのまま使うことができないのですが、MixedRealityToolkit(MRTK)に3DKeyboardのPrefabが含まれており、これを使うことで簡単にKeyboardが出せるようになっています。
今回はMRTKのKeyboard Prefabを使って、手っ取り早く文字入力できる方法を説明します。

この記事はネクストスケープ クラウド事業本部 Advent Calendar 2017の20日目となります。

実行イメージ


今回の検証環境

  • Unity:2017.2.1f1
  • MixedRealityToolkit(MRTK):2017.2.1.0(MixedRealityToolkit for Unity 2017.2.1f1)

シーンを準備する

まずは通常のHoloLensアプリと同じく、MRTKのインポートやプロジェクトの設定、シーンの作成を行います。

続いて、MRTKから下記のPrefabをシーンに入れます。

  • HoloToolkit/Input/Prefabs/Cursor/Cursor
  • HoloToolkit/Input/Prefabs/InputManger
  • HoloToolkit/UX/Prefabs/Keyboard

MRTKからPrefabを追加

キーボードオブジェクトはカメラの設定が必要ですので、InspectorからCamera項目にMainのカメラを設定します。
※これを行わないと視線が取れません。

KeyboardのCamera項目にMainCameraを設定

今回はさらにキーボードを表示するためのボタンとなるオブジェクト(InputStart)と入力した文字を表示するオブジェクト(InputText)を追加し、下記のようなシーンを作成しました。

今回のプロジェクト

キーボードを表示・入力値取り込みを行うスクリプトを用意する

今回はInputStartオブジェクトをタップするとキーボードを表示し、入力値をInputTextオブジェクトに入れるようなスクリプトを作成します。
InputStartスクリプトを作成し、下記のコードを貼り付けてください。

InputStart.cs

  1. using System;
  2. using HoloToolkit.UI.Keyboard;
  3. using HoloToolkit.Unity.InputModule;
  4. using UnityEngine;
  5. public class InputStart : MonoBehaviour,IInputClickHandler
  6. {
  7.     // キー入力先のTextMesh
  8.     public TextMesh TargetTextMesh;
  9.     public void OnInputClicked(InputClickedEventData eventData)
  10.     {
  11.         // すでにキーボードを開いていれば閉じる
  12.         Keyboard.Instance.Close();
  13.         // キーボードを表示する
  14.         Keyboard.Instance.PresentKeyboard();
  15.         // キーボードの位置をオブジェクトの近くに調整する
  16.         Keyboard.Instance.RepositionKeyboard(transform, null, 0.1f);
  17.         // キー入力値更新時のイベントを設定する
  18.         Keyboard.Instance.OnTextUpdated += KeyboardOnTextUpdated;
  19.         // キーボードを閉じたときのイベントを設定する
  20.         Keyboard.Instance.OnClosed += KeyboardOnClosed;
  21.     }
  22.     private void KeyboardOnTextUpdated(string s)
  23.     {
  24.         // 入力された文字列が渡されるので、
  25.         // TextMeshにセットする
  26.         TargetTextMesh.text = s;
  27.     }
  28.     private void KeyboardOnClosed(object sender, EventArgs eventArgs)
  29.     {
  30.         // イベントを解除する
  31.         Keyboard.Instance.OnTextUpdated -= KeyboardOnTextUpdated;
  32.         Keyboard.Instance.OnClosed -= KeyboardOnClosed;
  33.     }
  34. }

スクリプトを作成しましたら、InputStartオブジェクトに追加します。
Inspectorで表示先のTextMeshを設定するようにしてありますので、追加後にInputTextオブジェクトをドロップして設定します。

スクリプト追加とテキスト出力先の設定

結果

HoloLensにデプロイしてアプリを実行するとKeyboardと書かれたオブジェクトが表示されますので、ここをタップするとキーボードが表示されます。
また、入力した値がタップしたオブジェクトの上部に表示されます。

実行イメージ

さいごに

HoloToolkit-ExampleのKeyboardSampleSceneにはここで紹介していない機能を使ったデモもありますので、興味のある方は参考にしてみてください。


ネクストスケープ企業サイトへ

NEXTSCAPE

検索する

タグ

メタデータ

投稿のRSS