本日はオリジナルのUI枠です。
本ブログではHoloLensで使用するためのオリジナルのUIを作成してGitHubで公開しています。
アプリケーションでテンキーを使用したかったので簡単に作成しました。
その1はテンキーのレイアウトとアイコンを作成しました。
その2はMRTKのバージョン2.4から導入された機能のIconSetを作成しました。
前回のその3ではスクリプトでキーを打つと文字が入力できるようにしました。
今回はコードを解説していきます。
〇 今回以下のようなスクリプトを作成しました。
using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; /// <summary> /// Function of the numeric keypad /// </summary> public class TenKeyInput : MonoBehaviour { [Serializable] public class MyEvent : UnityEvent<string> { } [SerializeField] MyEvent _tenKeyevent; string _numberField; //通常の数値を入力する。 public void KeyInput(float number) { _numberField += number.ToString() ; _tenKeyevent.Invoke(_numberField); } }
テンキーの各キーを押すことでPressableButtonHoloLens 2のEventsでKeyInput(float number)を呼び出します。
numberにはPressableButtonHoloLens 2のEventsのフィールドに記入した数値が入ります。
public void KeyInput(float number) { _numberField +=number.ToString(); _tenKeyevent.Invoke(_numberField); }
_numberFieldにはボタンを押されるたびに数値が追加されます。
tenKeevent.Invoke(numberField)ではTenKeyInputコンポーネントで指定するイベントに動的に引数として_numberFieldを渡し、String型として表示させています。
通常UnityEventは引数を動的に指定することはできません。
そこでUnityEventクラスを拡張して動的にString型をUnityEventの引数に代入できるようにしました。
[Serializable] public class MyEvent : UnityEvent<string> { } [SerializeField] MyEvent _tenKeyevent;
この実装はこちらの記事を参考にさせていただきました。
inspector上でテキストを指定することでテキストに入力した数式が表示されます。
〇キーの追加
1~9までのキーがありますが、0に対応するキーがありません。 1のキーを複製してY軸に沿ってずらします。
複製したキーを0と名付け、PressableButtonHoloLens 2のEventsでのFloatの値も0にします。
0キーのIconSetで最初に作成していた0の画像をクリックすることで簡単に0のキーになります。
以上で0~9まで数字が表示されるテンキーが完成しました。
次回は今回作成したテンキーを基にさらに拡張していきます。