我有一个包含一些按钮的预制件,我想获取按钮并通过脚本向他们添加特定的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”是我的按钮(标签名称)
所以在这一点之后,如何在单击按钮时对其进行编码以添加特定功能?
任何帮助将不胜感激,谢谢!
获取按钮组件并向其添加侦听器。单击该按钮时,监听器将调用该函数。 TaskOnClick是一个示例函数,单击该按钮时将调用该函数。
t.GetComponent<Button>().onClick.AddListener(TaskOnClick);
void TaskOnClick()
{
Debug.Log("You have clicked the button!");
}
使用.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")}));
您必须确保它实际上是一个按钮,否则代码将失败。这当然可以修改,只是一个例子。我希望这有帮助!