访问预制的子项(按钮),并向其添加功能OnClick。统一

时间:2019-04-29 12:19:40

标签: user-interface unity3d button onclick game-development

我有一个包含一些按钮的预制件,我想获取这些按钮并通过脚本向其添加特定的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 个答案:

答案 0 :(得分:1)

获取按钮组件并向其添加侦听器。单击该按钮时,侦听器将调用该函数。 TaskOnClick是一个示例函数,当单击按钮时将调用它。

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


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

答案 1 :(得分:1)

使用.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")}));

您必须确保它实际上是一个按钮,否则代码将失败。这当然可以修改,仅是示例。我希望这会有所帮助!