Я пытаюсь передать индекс нажатой кнопки в Repeat (значение int) и написал это: gp.GetComponentInChildren().onClick.AddListener(() => Повтор(реп));
Но когда я нажимаю любую кнопку, я получаю последний индекс кнопки для всех. Я хочу знать, есть ли способ передать индекс той кнопки, которую я нажал в Repeat()?
void chatDialogs() {
foreach (Transform child in this.transform) {
GameObject.Destroy (child.gameObject);
}
for (int i = 5; i > 0 ; i--) {
int currentStep = Laststep - i;
if (currentStep >= 0) {
gp = (GameObject)Instantiate (playerPreFab);
gp.transform.SetParent (this.transform);
}
gp.GetComponentInChildren<Button> ().onClick.AddListener(() =>
Repeat(**transform.GetSiblingIndex()**));
}
public void Repeat(int speakstep) {
Application.ExternalCall("textspeak", speakstep);
}
в объекте speakstep Repeat() должен быть передан индекс нажатой кнопки, но он получает последний индекс при каждой кнопке, которую я нажимаю.





Я думаю, вы можете сделать что-то вроде этого:
AddButtonListener(gp.GetComponentInChildren<Button> (), i);
внутри вашей петли for,
когда AddButtonListener определяется как:
void AddButtonListener(Button b, int index)
{
b.onClick.AddListener(()=>{Repeat(index)});
}
Таким образом, вы фиксируете индекс кнопки в функции слушателя (но я не уверен, как правильно называется этот шаблон), и я написал это, фактически не запуская его. Надеюсь, теперь у вас достаточно информации, чтобы заставить его работать.
затем сделайте это: b.onClick.AddListener(()=>{Repeat(b.transform.GetSiblingIndex())}); и удалите параметр index из AddButtonListener
Используя эту строку - b.onClick.AddListener(()=>{Repeat(b.transform.GetSiblingIndex())}); Я получаю 0-й индекс для всех кнопок.
На самом деле в моем цикле for я создаю экземпляр только 5 элементов, остальные уничтожаются. Следовательно, я не могу присвоить фактическое значение индекса i в этой строке - AddButtonListener(gp.GetComponentInChildren<Button> (), i);