我有四个按钮,如:
我还有一个将我的脚本附加到其上的游戏对象
在脚本下我有一个函数,当我在onClick()按钮中使用它时,它应该打印按钮的文本。
检查
如何在不同的按钮上调用一个功能并打印出用户点击的那些按钮的文本?
答案 0 :(得分:1)
不是将string
传递给回调函数,而是传递Button
实例本身更有意义。如果您这样做,将来如果需要,您将能够从Button
访问更多数据。
public Button[] Btn;
void OnEnable()
{
//Register Button Events
for (int i = 0; i < Btn.Length; i++)
{
int btIndex = i;
Btn[i].onClick.AddListener(() => buttonCallBack(Btn[btIndex]));
}
}
private void buttonCallBack(Button buttonPressed)
{
Debug.Log(buttonPressed.GetComponentInChildren<Text>().text);
if (buttonPressed == Btn[0])
{
//Your code for button 1
}
if (buttonPressed == Btn[1])
{
//Your code for button 2
}
if (buttonPressed == Btn[2])
{
//Your code for button 3
}
if (buttonPressed == Btn[3])
{
//Your code for button 4
}
}
void OnDisable()
{
//Un-Register Button Events
for (int i = 0; i < Btn.Length; i++)
{
Btn[i].onClick.RemoveAllListeners();
}
}
如果您仍想传递按钮文字 :
public Button[] Btn;
void OnEnable()
{
//Register Button Events
for (int i = 0; i < Btn.Length; i++)
{
int btIndex = i;
string btText = Btn[btIndex].GetComponentInChildren<Text>().text;
Btn[i].onClick.AddListener(() => buttonCallBack(btText));
}
}
private void buttonCallBack(string buttonText)
{
Debug.Log(buttonText);
}
void OnDisable()
{
//Un-Register Button Events
for (int i = 0; i < Btn.Length; i++)
{
Btn[i].onClick.RemoveAllListeners();
}
}
请务必将Buttons
分配到编辑器中的Btn
变量插槽,否则您将收到null
异常错误。
答案 1 :(得分:1)
取而代之的是列表中的所有按钮。制作一个脚本Button.cs并将其提供给每个UI按钮
在该脚本中创建一个公共方法
public void OnButtonClickListener(int index) {
// Do your code here for button click using its index
}
现在你只需要将每个UI按钮的回调分配给这个公共方法,并传递按钮索引的参数。
我希望这会对你有帮助......