如何将 EventTriggers 添加到列表中的多个实例化预制件?
How do I add EventTriggers to Multiple instantiated prefabs from a list?
我有一个正在生成动态数量的预制件。
我想为它们中的每一个附加一个事件触发器,在指针单击时调用一个接受 int 作为参数的方法。
我有以下部分有效的代码,但是添加到每个预制件的事件使用相同的参数,即使它们被赋予不同。
foreach (EasterEgg EE in AllEasterEggs.List)
{
Transform x = Instantiate(EasterEggPrefab);
...
EventTrigger.Entry Entry = new EventTrigger.Entry();
Entry.eventID = EventTriggerType.PointerClick;
Entry.callback.AddListener((eventData) => { EasterEggClicked(EE.ID); });
x.GetChild(1).GetComponent<EventTrigger>().triggers.Add(Entry);
}
EE.Id 第一项将是 0,然后是 1,然后是 2 等等。我已经调试以确保在添加侦听器时 EE.Id 是正确的数字,这是真的。正在正确添加触发器。
但是当我触发触发器时(怎么说?),传递的参数beign始终是该列表中最后一项的参数。例如,如果 AllEasterEggs.List 包含 5 个元素,则所有元素都将在指针单击时触发调用 EasterEggClicked(4),而它们应该是 EasterEggClicked(0) 到 EasterEggClicked(4)。
作为请求,这是答案:
而不是将 EE
对象传递给匿名委托,只需在之前存储 EE.ID
的值并传递此:
foreach (EasterEgg EE in AllEasterEggs.List)
{
Transform x = Instantiate(EasterEggPrefab);
...
EventTrigger.Entry Entry = new EventTrigger.Entry();
Entry.eventID = EventTriggerType.PointerClick;
int ID = EE.ID;
Entry.callback.AddListener((eventData) => { EasterEggClicked(ID); });
x.GetChild(1).GetComponent<EventTrigger>().triggers.Add(Entry);
}
我有一个正在生成动态数量的预制件。
我想为它们中的每一个附加一个事件触发器,在指针单击时调用一个接受 int 作为参数的方法。
我有以下部分有效的代码,但是添加到每个预制件的事件使用相同的参数,即使它们被赋予不同。
foreach (EasterEgg EE in AllEasterEggs.List)
{
Transform x = Instantiate(EasterEggPrefab);
...
EventTrigger.Entry Entry = new EventTrigger.Entry();
Entry.eventID = EventTriggerType.PointerClick;
Entry.callback.AddListener((eventData) => { EasterEggClicked(EE.ID); });
x.GetChild(1).GetComponent<EventTrigger>().triggers.Add(Entry);
}
EE.Id 第一项将是 0,然后是 1,然后是 2 等等。我已经调试以确保在添加侦听器时 EE.Id 是正确的数字,这是真的。正在正确添加触发器。
但是当我触发触发器时(怎么说?),传递的参数beign始终是该列表中最后一项的参数。例如,如果 AllEasterEggs.List 包含 5 个元素,则所有元素都将在指针单击时触发调用 EasterEggClicked(4),而它们应该是 EasterEggClicked(0) 到 EasterEggClicked(4)。
作为请求,这是答案:
而不是将 EE
对象传递给匿名委托,只需在之前存储 EE.ID
的值并传递此:
foreach (EasterEgg EE in AllEasterEggs.List)
{
Transform x = Instantiate(EasterEggPrefab);
...
EventTrigger.Entry Entry = new EventTrigger.Entry();
Entry.eventID = EventTriggerType.PointerClick;
int ID = EE.ID;
Entry.callback.AddListener((eventData) => { EasterEggClicked(ID); });
x.GetChild(1).GetComponent<EventTrigger>().triggers.Add(Entry);
}