ali karimifard
ali karimifard

Reputation: 115

Remove listener in unity

I'd added a listener in following code to a game object :

 Game_Controller.Database [m, n].Nute_M.AddComponent(typeof(EventTrigger));
 EventTrigger trigger =Game_Controller.Database [m, n].Nute_M.GetComponent<EventTrigger> ();
 EventTrigger.Entry entry = new EventTrigger.Entry ();
 entry.eventID =EventTriggerType.PointerClick;
 entry.callback.AddListener ((eventData) => Game_Controller.Database [m, n].Nute_M.GetComponent<Nute_Onclick> ().onclick (m, n, "white"));
 trigger.triggers.Add (entry);

I have a problem in Removing this listener from game object ....

it doesn't work:

EventTrigger trigger =Game_Controller.Database [indexi, indexj].Nute_M.GetComponent<EventTrigger> ();
EventTrigger.Entry entry = new EventTrigger.Entry ();
entry.eventID = EventTriggerType.PointerClick;
entry.callback.RemoveAllListeners ();
trigger.triggers.Add (entry);

please help me.

Upvotes: 1

Views: 8273

Answers (1)

Sergiy Klimkov
Sergiy Klimkov

Reputation: 540

You need remove listener for same object as you add. In line trigger.triggers.Add (entry); you add instance of EventTrigger.Entry to list. When you use EventTrigger.Entry entry = new EventTrigger.Entry (); you create new inctsnce of EventTrigger.Entry that not have any listeners in triggers list. So you must find entry you created earler in list, and remove listener from it.
Example:

EventTrigger trigger =Game_Controller.Database [indexi, indexj].Nute_M.GetComponent<EventTrigger> ();
List<EventTrigger.Entry> entriesToRemove = new List<EventTrigger.Entry>();

//finding required entry by eventId
foreach (var entry in trigger.triggers)
{        
    if (entry.eventID == EventTriggerType.PointerClick)
    {
        //remove listener from entry
        entry.callback.RemoveAllListeners();
        //add entry to transitional list
        entriesToRemove.Add(entry);
    }
}

//remove all entries satisfied condition from triggerlist
foreach(var entry in entriesToRemove)
{
    trigger.triggers.Remove(entry);
}

Upvotes: 3

Related Questions