UI按钮侦听器AddListener无法在循环中工作

时间:2017-04-26 13:26:50

标签: c# user-interface unity3d

我遇到了UI监听器的问题。我尝试将点击监听器分配给for循环中的方法,但每次我选择了最后一个选项。

public Button[] options;

void Start () 
{
    for(int i = 0; i < options.Length; i++)
    {
        options[i].onClick.AddListener(()=> {OptionPressed(i);});
    }
}

private void OptionPressed(int i)
{
    print (i);
}

总是打印3.我的问题是为什么?还有为什么3只有3个按钮,所以它应该是2?

1 个答案:

答案 0 :(得分:4)

它打印3,因为你没有装箱i的值,每次迭代时它的值都会被重写。
要解决此问题,请尝试执行以下操作:

for ( int i = 0; i < options.Length; ++i )
{
    int j = i;
    options[i].onClick.AddListener( () => { OptionPressed(j); } );
}

Check the difference