EventTrigger 在循环中的意外结果

Unexpected results of EventTrigger in loop

我在一个循环中使用一组游戏对象(图像精灵)填充了一个网格布局。在循环中,我希望图像是可点击的,并将玩家带到不同的场景。

如果尝试以下方法有效:

    EventTrigger[] trigger = new EventTrigger[pocet];
    EventTrigger.Entry[] entries = new EventTrigger.Entry[pocet];

    entries[0] = new EventTrigger.Entry();
    entries[0].eventID = EventTriggerType.PointerUp;
    entries[0].callback.AddListener((eventData) => {
    newObj[0].transform.localScale += new Vector3(2f, 2f, 0);
       });
    trigger[0].triggers.Add(entries[0]); 

我可以继续用所有索引复制它,它会正常工作,但是 如果我在这样的循环中创建它:

    for(int i = 0; i<pocet-1;i++)
        {
        entries[i] = new EventTrigger.Entry();
        entries[i].eventID = EventTriggerType.PointerUp;
        entries[i].callback.AddListener((eventData) => {
            newObj[i].transform.localScale += new Vector3(2f, 2f, 0);
        });
        trigger[i].triggers.Add(entries[i]);
        }

EventTrigger 适用于所有图像,但总是放大最后一个图像(对象)。几乎就像听众被重置,只记住最后一个,我不知道要改变什么才能让它工作。

您不能在 lambda 表达式中使用迭代器 i

当最终调用时,最后一个值用于所有按钮中的 i

→首先将其存储在变量中

var index = i; 
entries[i].callback.AddListener((eventData) => {
    newObj[index].transform.localScale += new Vector3(2f, 2f, 0);
});