本日はOsaka HoloLens Hackathon 2022二日目の記事です。
11日からOsaka HoloLens Hackathon2022が開催されています。
筆者は指文字のアイデアで参加しています。
今回は指文字のために日本語のキーボードを作成します。
〇キーボードの作成
MRTKではアプリ内で使用できるキーボードが提供されています。
しかし今回はあいうえおの日本語が入力できるキーボードを使用したいです。
指文字自体はアルファベットもあり、海外でも使用することができますが、今回の最小構成では日本語のみを想定しています。そのため日本語のみが使用できるキーボードを新規作成します。
ベースには以前作成したテンキーを使用します。
①次のスクリプトを作成します。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using TMPro;
public class JapaneeseKeyBoard : MonoBehaviour
{
[Serializable] public class MyEvemt :UnityEvent<string>
{}
[SerializeField] private MyEvemt _Keyevent;
private string _Field;
[SerializeField] private TextMeshPro _text;
public void KeyInput(string number)
{
_Field += number;
_Keyevent.Invoke(_Field);
}
public void BackSpace()
{
int _Dsize = _Field.Length-1;
Debug.Log(_Field);
Debug.Log(_Dsize);
_Field = _Field.Remove(_Dsize, 1);
_text.text = _Field;
}
}
②シーンにMRTKで提供されているボタンプレファブを配置します。
今回は[PressableButtonHoloLens2Circular_32x32]を使用しています。

③[PressableButtonHoloLens2Circular_32x32]のインスペクターウィンドウから[Button Config Helper]コンポーネントの[Enable Main Lavel]と[Enable See it and Say it Lavel]のチェックを外します。

これによってボタンがアイコンのみになります。
MRTKのボタンではIconSetを作成することで任意のアイコンを使用することができますが、作業の都合でアイコンは一度飛ばします。
④[JapaneeseKeyBoard]コンポーネントをボタンにアタッチします。
⑤シーンにTextMeshProの3Dテキストを配置し、[JapaneeseKeyBoard]コンポーネントの[KeyEvent]にアタッチし、Functionは[TextMeshPro.Text]を指定します。

⑥[Button Config Helper]コンポーネントの[Basic Events]にイベントを加え[JapaneeseKeyBoard]コンポーネントをアタッチし関数を[JapaneeseKeyBoard.KeyInput]を指定します。
また引数にはひらがなを入力します。

以上でボタンを押すとTextMeshProのフィールドにひらがなが入力されるようになります。
しかしデバッグをすると文字化けしてしまいます。

これはTextMeshProで使用しているフォントが日本語に対応していないためです。日本語に対応する別のフォントを入れる必要があります。
〇日本語のフォントの導入
今回はGoogle fontから以下のフォントを使用します。
①Unityワールドメニューから[Windows]→[TextMeshPro]→[Font Assets Creater]を開きます。

②[Sauce font file]にダウンロードしたフォントファイルをアタッチします。

③設定を画像のように指定します。

④[Custom Charactor List]には次のGithubからテキストをコピーして貼り付けます。
⑤作成したフォントアセットを保存しすでにあるテキストのFontAssetsへ入れ替えます。

以上で日本語が表示できるようになりました。
