Получите доступ к дочернему элементу (кнопке) префаба и добавьте к нему функцию OnClick.Единство - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть префаб, который содержит несколько кнопок, и я хочу получить кнопки и добавить к ним определенные функции onClick через скрипт.Я не могу найти правильный способ получить кнопки.Я пытаюсь:

    tempGo = Instantiate(prefabs[0]);

    tempGo.transform.SetParent(transform, false);

    tempGo.transform.localScale = Vector3.one;
    tempGo.transform.localPosition = Vector3.zero;

    Transform t = tempGo.GetComponentInChildren<Transform>().Find("AddGoals");

"AddGoals" - это мои кнопки (имя тега)

Итак, после этого момента, как я могу кодировать его, чтобы добавить определенныйФункция, когда кнопка нажата?

Любая помощь будет оценена спасибо!

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

Используя .Find (""), вы ищете игровой объект с этим именем , а не его тегом. После создания экземпляра объекта вы можете использовать GameObject.FindGameObjectsWithTag («AddGoals»). Это вернет массив всех объектов с этим тегом. Затем с Linq вы можете сделать что-то вроде:

var items = GameObject.FindGameObjectsWithTag("AddGoals"); //This gives gameobject array
var itemTansforms = items.Select(x=>x.transfrom).ToList(); //gives you a list of the object tansforms

Что касается добавления события, вам потребуется захватить компонент кнопки объекта, а затем добавить событие onclick.

items.ForEach(x=>x.GetComponent<Button>().AddListener(delegate {Debug.Log($"{x.name} has been clicked")}));

Вы должны убедиться, что это действительно кнопка, иначе код не будет выполнен. Это, конечно, можно изменить, и это только пример. Надеюсь, это поможет!

1 голос
/ 29 апреля 2019

Получить компонент кнопки и добавить слушателя к нему. Слушатель вызовет функцию при нажатии этой кнопки. TaskOnClick - это пример функции, которая будет вызываться при нажатии кнопки.

t.GetComponent<Button>().onClick.AddListener(TaskOnClick);


void TaskOnClick()
{
    Debug.Log("You have clicked the button!");
}
...