Reputation: 115
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
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