A for
loop добавить N - при прослушивании щелчка по некоторым кнопкам.
При щелчке параметр, например, должен быть 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);
}
...
}