Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态添加要切换的侦听器_C#_Unity3d - Fatal编程技术网

C# 动态添加要切换的侦听器

C# 动态添加要切换的侦听器,c#,unity3d,C#,Unity3d,我试图创建一个从列表中动态添加的切换列表,直到我尝试向切换添加一个侦听器。对于每个切换,传递给SelectColor的值应增加1,但传递的值正好是数组的长度。每次切换时,将索引始终置于最后一个索引之上1 foreach (HexLand color in colors) { Toggle option = Instantiate<Toggle> (ColorTogglePrefab); option.transform.SetParent (EditorOptions

我试图创建一个从列表中动态添加的切换列表,直到我尝试向切换添加一个侦听器。对于每个切换,传递给SelectColor的值应增加1,但传递的值正好是数组的长度。每次切换时,将索引始终置于最后一个索引之上1

foreach (HexLand color in colors) {
    Toggle option = Instantiate<Toggle> (ColorTogglePrefab);
    option.transform.SetParent (EditorOptions.transform);
    option.name = "Toggle " + color.Name;
    option.group = toggleGroup;
    if (i == 0) {
        option.isOn = true;
    } else {
        option.isOn = false;
    }
    option.GetComponent<HexLandOption> ().label.text = color.Name;
    option.onValueChanged.AddListener (delegate {
        SelectColor (i); // current usage has array length 2. i always returns 2.
    });
    i++;
  }
public void SelectColor(int index) {
    Debug.Log(index); // Writes 2 to console.
    activeColor = colors [index].Color;
}
foreach(颜色中的HexLand颜色){
切换选项=实例化(ColorTogglePrefab);
option.transform.SetParent(EditorOptions.transform);
option.name=“Toggle”+color.name;
option.group=切换组;
如果(i==0){
option.isOn=true;
}否则{
option.isOn=false;
}
option.GetComponent().label.text=color.Name;
option.onValueChanged.AddListener(委托{
SelectColor(i);//当前使用的数组长度为2。我始终返回2。
});
i++;
}
公共void SelectColor(整数索引){
Debug.Log(index);//将2写入控制台。
activeColor=colors[index].Color;
}

是否有一种方法可以确保每个切换正确返回其值?

您正在从外部范围捕获
I
。委托不会立即执行,因此在回调发生时,
i
已经具有最后一个值,即数组的长度

在循环中创建另一个变量来存储迭代的值


请参见

也许,用于循环?这是我的第一次尝试。它产生了同样的结果。始终返回2。我不确定如何正确地将其转换为适合我需要的形式?。对于委托以及委托人应该如何工作,我不是很有经验。在委托人之前添加一个变量,并使用它来代替
I
var index=I;option.onValueChanged.AddListener(委托{SelectColor(index);})值现在不会超出范围,但是现在它只返回数组中最后一个可用的值。