Unity3d 如何将EventTriggers添加到列表中的多个实例化预置?

Unity3d 如何将EventTriggers添加到列表中的多个实例化预置?,unity3d,instantiation,unity5,eventtrigger,Unity3d,Instantiation,Unity5,Eventtrigger,我有一个预制,我产卵的动态数量 我想在pointerclick上为它们中的每一个附加一个事件触发器,以调用一个接受int作为参数的方法 我有下面的代码,部分工作,但是添加到每个预置的事件使用相同的参数,即使它们被赋予不同的名称 foreach (EasterEgg EE in AllEasterEggs.List) { Transform x = Instantiate(EasterEggPrefab); ... EventTrigger.Entry Entry = ne

我有一个预制,我产卵的动态数量

我想在pointerclick上为它们中的每一个附加一个事件触发器,以调用一个接受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);
}
foreach(alleasteregg.List中的EasterEgg EE)
{
转换x=实例化(EasteregPrefact);
...
EventTrigger.Entry=新的EventTrigger.Entry();
Entry.eventID=EventTriggerType.PointerClick;
Entry.callback.AddListener((eventData)=>{EasterEggClicked(EE.ID);});
x、 GetChild(1.GetComponent().triggers.Add(条目);
}
第一项上的EE.Id将是0,然后是1,然后是2等等。我已经调试过,以确保在添加侦听器时EE.Id是正确的数字,这是真的。正在正确添加触发器


但是,当我触发触发器(怎么说?)时,beign passed参数始终是该列表中最后一项的参数。例如,如果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);
}
foreach(alleasteregg.List中的EasterEgg EE)
{
转换x=实例化(EasteregPrefact);
...
EventTrigger.Entry=新的EventTrigger.Entry();
Entry.eventID=EventTriggerType.PointerClick;
int ID=EE.ID;
Entry.callback.AddListener((eventData)=>{EasteregClicked(ID);});
x、 GetChild(1.GetComponent().triggers.Add(条目);
}

这非常有趣。匿名委托应该保留正确的EE.ID,但看起来不是。我看到了一些解决方法-请在创建委托之前尝试存储int-ID,并传递此int,而不是传递EE对象。也许这个委托在循环中有对象时会将最后一个作为引用,但如果值类型为int,则不应该这样做。我当时给出了答案。干杯