Edited at

【Unity】イベント登録の方法覚書


概要

イベントを外部から登録する方法をよく忘れるのでメモ。


イベントリスナをインスペクタから登録する方法

オブジェクトがクリックされた場合にリスナを実行するコードを例にする。


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> { }
}


インスペクターは次のようになる。

WS000070.JPG


イベントをスクリプトから登録するコード

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) => { /* 処理 */ }
}