我遇到了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?
答案 0 :(得分:4)
它打印3
,因为你没有装箱i
的值,每次迭代时它的值都会被重写。
要解决此问题,请尝试执行以下操作:
for ( int i = 0; i < options.Length; ++i )
{
int j = i;
options[i].onClick.AddListener( () => { OptionPressed(j); } );
}