本日は MRTK の技術調査枠です。
引数指定の UnityEvent を介して MRTK の Slider から値を取得する手順を記事にします。
前提条件
前回記事の続きです。
bluebirdofoz.hatenablog.com
引数指定のUnityEvent
UnityEvent クラスを継承した新規クラスを作成すると、UnityEvent で動的に引数を渡すことができます。
docs.unity3d.com
以下の記事でも利用例を記述しています。
bluebirdofoz.hatenablog.com
UnityEventを仲介する
MRTK のスライダーイベントはイベントデータとして SliderEventData を渡すため、float の値を利用する関数を直接呼び出すことはできません。
UnityEvent
スクリプト例として以下のスクリプトを作成しました。
・SettingSliderEvent.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; // SliderEventDataアクセスのため using Microsoft.MixedReality.Toolkit.UI; // UnityEvent を利用するため Events を追加 using UnityEngine.Events; // 引数に float を受け取る UnityEvent<T0> の継承クラスを作成する // Inspector ビューに表示させるため、Serializable を設定する [System.Serializable] public class ExtFloatSliderEvent : UnityEvent<float> { } public class SettingSliderEvent : MonoBehaviour { // 作成した継承クラスで UnityEvent を登録する /// <summary> /// スライダー値変更時実行処理 /// </summary> [SerializeField, Tooltip("スライダー値変更時実行処理")] private ExtFloatSliderEvent SetExtFloatSliderEvent; public void OnSliderUpdated(SliderEventData eventData) { Debug.Log("SliderValue:" + eventData.NewValue.ToString()); SetExtFloatSliderEvent.Invoke(eventData.NewValue); } }
合わせて受け取った float 値をデバッグログに表示するパブリック関数を持つスクリプトを作成しました。
・DebugLogValue
using System.Collections; using System.Collections.Generic; using UnityEngine; public class DebugLogValue : MonoBehaviour { /// <summary> /// 受け取ったfloat値をデバッグログに表示する /// </summary> /// <param name="a_value"></param> public void ShowFloatValue(float a_value) { Debug.Log("ShowFloatValue : " + a_value.ToString()); } }
2つのスクリプトを適当なオブジェクトにアタッチします。
前回記事と同様に、PinchSlider のイベントには SliderEentData を引数とする SettingSliderEvent.cs の関数を指定します。
次に呼び出される SettingSliderEvent.cs のイベントに float 値を受け取る関数を指定します。
シーンを再生して動作を確認します。
Slider の変化値を float 値を受け取る関数に UnityEvent を介して渡すことができました。