デジタルフロッグ

Unityのアプリの開発をしながらいろいろと忘れないための備忘録でございます。

ボタンのイベントをスクリプトから登録、削除する方法

ボタンのイベントを削除する方法ですが、これは非永続的なイベントしか削除ができません。たしか

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class hogehoge: MonoBehaviour
{

    Button btn;

    void Awake()
    {
        btn = this.gameObject.GetComponent<Button>();
        //ボタンのイベントを追加する
        btn.onClick.AddListener( () => BtnAction() );
    }

    void BtnAction()
    {
        Debug.Log( "btnAction" );
        this.RemoveBtnAction();
    }


    void RemoveBtnAction()
    {
        //ボタンのイベントをすべて削除する
        btn.onClick.RemoveAllListeners();
    }

}

非永続的なイベントとはAddListenerで追加されたイベントのことを指していて、GameObjectのInspectorのButtonコンポーネントスクリプトをアタッチしてイベント登録されたイベントに関しては永続的なイベントとなるので、RemoveAllListenersを使っても削除することができません。

docs.unity3d.com