我有一个预制件,我正在产生一个动态的数量。
我想在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);
}
EE.Id第一项将是0,然后它将是1,然后是2等我调试以确保在添加监听器时EE.Id是正确的数字,这是真的。正确添加了触发器。
但是当我触发触发器(怎么说?)时,传递的参数beign始终是该列表中最后一项的参数。例如,如果AllEasterEggs.List包含5个元素,则所有元素都会在指针点击时触发调用EasterEggClicked(4),而它们应该是EasterEggClicked(0)到EasterEggClicked(4)。
答案 0 :(得分:1)
作为请求,这就是答案:
不是将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);
}