【发布时间】:2016-09-05 01:46:25
【问题描述】:
我有四个按钮,例如:
我还有一个将我的脚本附加到它的游戏对象
在脚本下我有一个函数,当我在 onClick() 按钮中使用它时,它应该打印按钮的文本。
检查员
如何在不同的按钮上调用一个函数并打印出用户点击的那些按钮的文本?
【问题讨论】:
我有四个按钮,例如:
我还有一个将我的脚本附加到它的游戏对象
在脚本下我有一个函数,当我在 onClick() 按钮中使用它时,它应该打印按钮的文本。
检查员
如何在不同的按钮上调用一个函数并打印出用户点击的那些按钮的文本?
【问题讨论】:
与其将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异常错误。
【讨论】:
Text,请在我的回答中使用第二种解决方案。代码将始终相同,并且事件会自动注册和取消注册。顺便说一句,为什么你认为这样做不是一个好方法?
而不是获取列表中的所有按钮。制作一个脚本 Button.cs 并给每个 UI 按钮
在该脚本中创建一个公共方法
public void OnButtonClickListener(int index) {
// Do your code here for button click using its index
}
现在您只需将每个 UI 按钮的回调分配给这个公共方法并传递按钮索引的参数。
希望对你有帮助……
【讨论】: