Unity C# 中按钮 onClick 参数错误

问题描述 投票:0回答:1

我有一个

ScrollView
,在
Grid Layout Group
对象上有一个
Content
组件 :

我的项目列表位于

Content
对象内,每个项目都拥有一个
Button
组件。

我正在尝试以编程方式添加

onClick
来处理大量对象并使用如下参数进行索引:

        int i = 0;
        foreach(Button btn in scrollViewContent.GetComponentsInChildren<Button>()) {
            btn.onClick.AddListener(() => Load(i));
            i++;
        }

但是

onClick
我总是在所有项目点击时得到最后一个索引+1。这是我的日志:

直到日志 44,这是

foreach
打印循环,日志“index : 45”是单击的结果。

所以两个问题:

• 为什么所有项目点击返回相同的索引?

• 如何获得索引 45,而 i var 停在 44?

c# unity-game-engine unityscript
1个回答
0
投票

问题是回调都使用相同的变量。这可能看起来很奇怪,因为 int 是一种值类型并且必须被复制。但是,该变量是在本地范围内捕获的,导致在所有回调中使用相同的变量。

要解决此问题,请在 foreach 循环内创建一个新的局部变量。

var i = 0;

foreach (var button in buttons)
{
    var index = i++;

    button.onClick.AddListener(() => Load(index)); 
}
© www.soinside.com 2019 - 2024. All rights reserved.