我在下面的代码中为游戏对象添加了一个监听器:
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);
我在从游戏对象中删除此侦听器时遇到问题....
它不起作用:
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);
请帮帮我。
答案 0 :(得分:1)
您需要删除添加的同一对象的侦听器。在第trigger.triggers.Add (entry);
行中,您可以将EventTrigger.Entry
的实例添加到列表中。当您使用EventTrigger.Entry entry = new EventTrigger.Entry ();
时,您在triggers
列表中创建了没有任何侦听器的EventTrigger.Entry的新内容。因此,您必须在列表中找到您创建的收件人条目,并从中删除监听器
例如:
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);
}