本日は HoloLens の技術調査枠です。
HoloLens のOS組み込みのキーボードを利用する手順をまとめます。
前回記事の続きです。
bluebirdofoz.hatenablog.com
HoloLensのOS組み込みのキーボードについて
RS5 以降ではOS組み込みのキーボードを Unity 内で呼び出すことが可能です。
システムに組み込まれたキーボードのため、MRTK のキーボードと以下の点が異なります。
・付属の音声認識による入力を利用できる
・パネルアプリでもそのままキーボードを呼び出せる
・日本語版OSであれば、日本語入力を行える
一方で以下のようなデメリットもあります。
・特定のプラットフォームでのみ利用可能(iPhone、Android、Windows Phone、Windows Store Apps)
・キーボードの表示位置を指定できない
・HoloLens上では一部正常に動作しない箇所がある(後述)
プロジェクトとシーンの準備
前回記事を参考に、確認用のパネルを用意したプロジェクトを作成します。
bluebirdofoz.hatenablog.com
キーボードの利用方法
シーン内に keyboard オブジェクトを配置する必要はありません。
UnityEngine.TouchScreenKeyboard でキーボードを呼び出すだけです。
docs.unity3d.com
以下の機能を持つスクリプトを作成します。
1.本スクリプトをアタッチしたオブジェクトをタップするとキーボードを表示する
2.キーボードで文字入力を行うと、同期的にテキストフィールドを更新する
・UnityKeyboardShow.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.XR.WSA.Input; using HoloToolkit.Unity.InputModule; public class UnityKeyboardShow : MonoBehaviour, IInputClickHandler { /// <summary> /// 文字列を反映するテキストフィールド /// </summary> [SerializeField, Tooltip("文字列を反映するテキストフィールド")] private Text TargetInputField; /// <summary> /// Unityキーボードの参照 /// </summary> private TouchScreenKeyboard p_keyboard = null; /// <summary> /// 定期実行 /// </summary> void Update() { // キーボードのインスタンスが生成済みか if (p_keyboard != null) { // キーボードの入力値をテキストフィールドに設定する TargetInputField.text = p_keyboard.text; } } /// <summary> /// アタッチオブジェクトのタップイベント /// </summary> /// <param name="eventData"></param> public void OnInputClicked(InputClickedEventData eventData) { // キーボードのインスタンスが生成済みか if (p_keyboard == null) { // 初回実行時はインスタンスを生成してキーボードを表示する // RS5の時点では KeyboardType を変更しても変わらない p_keyboard = TouchScreenKeyboard.Open(string.Empty); } else { // 2回目以降は active 値を true にすることで表示する p_keyboard.active = true; } } }
作成したスクリプトを Panel オブジェクトにアタッチします。
キーボード入力に合わせて更新するテキストフィールドを指定します。
TargetInputField に Text オブジェクトを設定します。
これで設定完了です。
TouchScreenKeyboard は UnityEditor 上ではサポートされていないため、[再生]ボタンで動かしてみてもキーボードは表示されません。
動作確認は HoloLens 上で実施する必要があります。
HoloLensでの動作確認
HoloLens(WindowsMR)プロジェクトの作成手順に従って、アプリを HoloLens にインストールします。
同じく Panel をタップしてキーボードを表示します。
文字列を入力して、テキストフィールドが更新されることを確認しましょう。
HoloLens上で一部正常に動作しない問題?
私の環境で TouchScreenKeyboard を利用した場合、以下の問題を検出しました。
・isSupported の情報で false が返ってくる
・[×]やブルームでキーボードを閉じると、status が Visibule のままキーボードが消失する(再表示できない)
正常に動作しない場合は MRTK のキーボードを利用しましょう。
TouchScreenKeyboard の説明ページには「XAML ベースのアプリケーションのみをサポートします」とあるので、もしかしたらD3Dでも呼び出せること自体が想定外の動作なのかもしれません。