与C#lambda一起使用时,Unity Button.onClick.AddListener()奇怪的行为

时间:2019-06-21 17:42:29

标签: c# unity3d lambda onclick listener

我正在尝试在Unity中创建一个游戏内商店。我在运行时通过以下ShopItem循环从for数组创建项目选择界面:

    for (int i = 0; i < buttons.Length; ++i)
    {
        if (shopItems[i].cost > settings.Coins)
            buttons[i].interactable = false;
        else
            buttons[i].onClick.AddListener(() => ShowBuyConfirmation(i));
    }

问题在于添加侦听器。当我按下游戏中的任何按钮时,都会得到IndexOutOfRangeException。经过调查,我发现函数ShowBuyConfirmation()总是用值shopItems.Length调用,这显然是错误的。我不理解的是为什么ShowBuyConfirmation()不会被使用适当的按钮索引调用,而是被值shopItems.Length所代替?

数组buttonsshopItems的长度始终相同,因此可以互换使用。

0 个答案:

没有答案