匿名関数で追加したボタンのイベント通知を削除する
※この記事は2017年06月17日にqiitaに投稿した内容です。
環境
Unity5.6.1f1
概要
ボタンのonClickに登録した匿名関数をRemoveAllListeners()で全削除するのではなく、個別に削除します 匿名関数でなくても使えるし、OnClick以外のイベントにも使えます
プログラム
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events;
public class TestUnityEvent : MonoBehaviour
{
[SerializeField] private Button[] _buttons = null;
private struct EventParam
{
public UnityAction action;
public UnityEvent unityEvent;
}
private List<EventParam> _eventParams = new List<EventParam>();
private void OnEnable()
{
for( int i = 0; i < _buttons.Length; i++ )
{
var button = _buttons [ i ];
var index = i;
var param = new EventParam()
{
unityEvent = button.onClick
};
button.onClick.AddListener( param.action = () => OnButtonClick( button, index ) );
_eventParams.Add( param );
}
}
private void OnDisable()
{
for( int i = 0; i < _eventParams.Count; i++ )
{
var param = _eventParams[ i ];
param.unityEvent.RemoveListener( param.action );
}
_eventParams.Clear();
}
private void OnButtonClick( Button button, int index )
{
Debug.Log( button.name + ":" + index );
}
}