unity3d 对于循环始终给予相同的输出[关闭]

iyr7buue  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(119)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

23天前关闭。
Improve this question

1.总结问题

下面的循环继续运行,我想,但总是给予我同样的点击按钮是“0”。它没有给我一个错误。但通过玩游戏,我可以看到,它总是相同的数字。

2.描述您尝试过的方法

我试着在网上搜索像我这样的人,但遗憾的是我什么都找不到。

3.显示一些代码

我说的代码。

int ButtonNum;

public void Start()
{
    for (int i = 0; i < ButtonsPage.Length; i++)
    {
        ButtonsPage[i].GetComponent<Button>().onClick.AddListener(delegate { ButtonClicked(ButtonNum); });
    }
}

public void ButtonClicked(int i)
{
    Debug.Log("Clicked" + i);
    if (WhichType == "Nose")
    {
        NoseColor.sprite = NosesColor[i];
        NoseOutline.sprite = NosesOutline[i];
    }
    //ButtonNum will be used to say which one is clicked. Still haven't add it though cause i wanted to fix this problem before
}
kulphzqa

kulphzqa1#

您没有以任何方式修改ButtonNum,我假设目标是使用i作为按钮编号,请尝试将代码更改为:

public void Start()
{
    for (int i = 0; i < ButtonsPage.Length; i++)
    {
        var temp = i;
        ButtonsPage[i].GetComponent<Button>().onClick.AddListener(delegate { ButtonClicked(temp); });
    }
}

由于C#中closures work的方式,需要临时变量。

相关问题