如何将 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);
}