概要
イベントを外部から登録する方法をよく忘れるのでメモ。
イベントリスナをインスペクタから登録する方法
オブジェクトがクリックされた場合にリスナを実行するコードを例にする。
CurrentEventProvider.cs
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
public class ReactionDetector : MonoBehaviour, IPointerClickHandler
{
[SerializeField]
private ClickEvent clickHandler;
public void OnPointerClick(PointerEventData eventData)
{
this.clickHandler.Invoke(this.gameObject);
}
public void AddClickHandler(UnityAction<GameObject> _clickHandler)
{
this.clickHandler.AddListener(_clickHandler);
}
[System.Serializable]
public class ClickEvent : UnityEvent<GameObject> { }
}
イベントをスクリプトから登録するコード
SliderのonValueChangedイベントにイベントリスナを登録する。
※OnValueChangedイベントは引数を取ることに注意。
using UnityEngine;
using UnityEngine.EventSystems;
public class HogeController : MonoBehaviour
{
public Slider bgmSlider;
void Start() => AddListener();
private void AddListener() => bgmSlider.onValueChanged.AddListener((value) => OnChangeBgmVolume(value));
public void OnChangeBgmVolume(float value) => { /* 処理 */ }
}