C# 动态添加要切换的侦听器
我试图创建一个从列表中动态添加的切换列表,直到我尝试向切换添加一个侦听器。对于每个切换,传递给SelectColor的值应增加1,但传递的值正好是数组的长度。每次切换时,将索引始终置于最后一个索引之上1C# 动态添加要切换的侦听器,c#,unity3d,C#,Unity3d,我试图创建一个从列表中动态添加的切换列表,直到我尝试向切换添加一个侦听器。对于每个切换,传递给SelectColor的值应增加1,但传递的值正好是数组的长度。每次切换时,将索引始终置于最后一个索引之上1 foreach (HexLand color in colors) { Toggle option = Instantiate<Toggle> (ColorTogglePrefab); option.transform.SetParent (EditorOptions
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);})代码>值现在不会超出范围,但是现在它只返回数组中最后一个可用的值。