夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

HoloLensで使えるオリジナルのUIを作成する  テンキー その5 スクリプト解説 テンキーの完成

本日はオリジナルのUI枠です。

本ブログではHoloLensで使用するためのオリジナルのUIを作成してGitHubで公開しています。

github.com

アプリケーションでテンキーを使用したかったので簡単に作成しました。

その1はテンキーのレイアウトとアイコンを作成しました。

redhologerbera.hatenablog.com

その2はMRTKのバージョン2.4から導入された機能のIconSetを作成しました。

redhologerbera.hatenablog.com

前回のその3ではスクリプトでキーを打つと文字が入力できるようにしました。

redhologerbera.hatenablog.com

今回はコードを解説していきます。

〇 今回以下のようなスクリプトを作成しました。

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にはボタンを押されるたびに数値が追加されます。

f:id:Holomoto-Sumire:20200701094055j:plain

tenKeevent.Invoke(numberField)ではTenKeyInputコンポーネントで指定するイベントに動的に引数として_numberFieldを渡し、String型として表示させています。

通常UnityEventは引数を動的に指定することはできません。

そこでUnityEventクラスを拡張して動的にString型をUnityEventの引数に代入できるようにしました。

  [Serializable] public class MyEvent : UnityEvent<string> { }
    [SerializeField] MyEvent _tenKeyevent;

この実装はこちらの記事を参考にさせていただきました。

unitygeek.hatenablog.com

inspector上でテキストを指定することでテキストに入力した数式が表示されます。

f:id:Holomoto-Sumire:20200701100612g:plain

〇キーの追加

 1~9までのキーがありますが、0に対応するキーがありません。 1のキーを複製してY軸に沿ってずらします。

  f:id:Holomoto-Sumire:20200701100832j:plain

複製したキーをと名付け、PressableButtonHoloLens 2のEventsでのFloatの値も0にします。

0キーのIconSetで最初に作成していた0の画像をクリックすることで簡単に0のキーになります。

 f:id:Holomoto-Sumire:20200701101053j:plain

 以上で0~9まで数字が表示されるテンキーが完成しました。

f:id:Holomoto-Sumire:20200701101309j:plain

 次回は今回作成したテンキーを基にさらに拡張していきます。