本日は MRTK の技術調査枠です。
引数指定の UnityEvent を介して MRTK の Slider から値を取得する手順を記事にします。
UnityEventを仲介する
MRTK のスライダーイベントはイベントデータとして SliderEventData を渡すため、float の値を利用する関数を直接呼び出すことはできません。
UnityEvent を利用して UnityEvent に変換する関数を作成することで、Slider のイベント発生時に float の値を利用する関数を呼び出すことができます。
スクリプト例として以下のスクリプトを作成しました。
・SettingSliderEvent.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Microsoft.MixedReality.Toolkit.UI;
using UnityEngine.Events;
[System.Serializable]
public class ExtFloatSliderEvent : UnityEvent<float>
{
}
public class SettingSliderEvent : MonoBehaviour
{
<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>
</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 を介して渡すことができました。