首页 > 解决方案 > unity c# 委托获取本地参数错误

问题描述

更新 :

这个问题和这个问题无关,但是UI Buttons的透明触发区域重叠了。问题本身应该结束。

循环将forN -on click 侦听器添加到某些按钮。

例如,当 clicked 时,参数应该是 'n',但有时会变成 'n+1'。

换句话说,当按钮编号“n”被点击时,“n”作为参数传递给代理。但实际上它有时会变成 'n+1' 作为参数传递。

我听说匿名函数应该将参数复制到局部变量。我已经完成了对代表的所有方式。但这没有帮助。

public class StageMenuController : MonoBehaviour
{
...
public Button stageTemplate;
void Start()
{
// get stage count
numberOfStages = SceneManager.sceneCountInBuildSettings;

Transform container = stageTemplate.transform.parent;

for (int i = 0; i < numberOfStages; i++){

    Button stage = Object.Instantiate(stageTemplate, container);
    ...
    // stage number on the icon
    int j = i+1;

    stage.transform.Find("stageNumber")
    .gameObject.GetComponent<TextMeshProUGUI>().text 
    = (j).ToString("D2");

    ...
    int m = j;

    bool addTheListener(int k){
            int m = k;
            Debug.Log("AddListener scene " +m);
            stage.onClick.AddListener(delegate(){
                int n = m;
                Debug.Log("go to scene " +n);
                UnityEngine.SceneManagement.SceneManager.LoadScene(n);
            });
            return true;
    }
    var x = addTheListener(j);
}
...
}

标签: c#unity3ddelegatesclosures

解决方案


推荐阅读