Если используемая вами кнопка Button
, вы можете сделать это следующим образом:
for (int i = 0; i < turretsOnTank.Length; i++)
{
GameObject turretButton = Instantiate(testingTurretButton, gameObject.transform.GetChild(0).GetChild(0).gameObject.transform);
turretButton.transform.GetChild(0).GetComponent<Text>().text = turretsOnTank[i].name;
turretButton.transform.position = new Vector3(150 + (100 * i), 330);
turretButton.GetComponent<Button>().onClick.AddListner(
() => turretHolder = turretsOnTank[i]);
}
() => turretHolder = turretsOnTank[i]
- это лямбда, которая установит поле turretHolder
с turretsOnTank[i]
, что i
- это индекс башни.
Кстати, ваш код выглядит так, как будто он нуждается в реформировании. GetChild()
возвращает преобразование, поэтому вам не нужно делать GetChild(0).gameObject.transform
, чтобы получить преобразование. Достаточно всего лишь GetChild(0)
.
И, поле transform
уже существует в MonoBehaviour
, поэтому вам не нужно обращаться к transform
через gameObject
.
И, Instantiate
может вернуть Transform
тип, если prefab равен Transform
. Итак, ваш код будет:
Transform turretButton = Instantiate(testingTurretButton.transform, gameObject.transform.GetChild(0).GetChild(0));
turretButton.GetChild(0).GetComponent<Text>().text = turretsOnTank[i].name;
turretButton.position = new Vector3(150 + (100 * i), 330);
turretButton.GetComponent<Button>().onClick.AddListner(
() => turretHolder = turretsOnTank[i]);
, который имеет более менее избыточность.