检测在 canvas 内按下了哪个 UI 按钮?
Detecting which UI button was pressed within canvas?
我的 UI 上有大约 10 个按钮,我必须检查触摸了哪一个。我正在使用以下逻辑并且工作正常,但现在由于某种原因我收到此错误:
NullReferenceException: Object reference not set to an instance of an object
DetectButton.Start () (at Assets/Scripts/DetectButton.cs:14)
知道会发生什么吗?这是我的代码(附在 canvas 上),我使用的是 Unity 版本 5.1.0f3。如果您需要任何其他信息,我很乐意提供,提前致谢
void Start()
{
this.GetComponent<Button>().onClick.AddListener(() =>
{
if (this.name == "btnJogadores2")
{
print ("2 jogadores");
jogadores = 2;
}
//QuantidadeJogadores(this.name);
//QuantidadePartidas(this.name);
});
}
代码未经测试,但它应该可以让您开始获取所有按钮。
void Start() {
var buttons = this.GetComponents<Button> ();
foreach(var button in buttons) {
button.onClick.AddListener(() = > {
if (this.name == "btnJogadores2") {
print("2 jogadores");
jogadores = 2;
}
//QuantidadeJogadores(this.name);
//QuantidadePartidas(this.name);
});
}
}
实际上很难区分按钮。
更实际的方法是制作 10 个游戏对象(Canvas 的子对象)并将您的脚本附加到每个对象。
你不必像现在这样去做。
一个更简单的好做法是为 canvas 中的每个按钮创建 10 个单独的游戏对象。然后为其中的所有按钮创建一个包含 10 个独立函数的脚本。将该脚本附加到您 canvas。然后在按钮 GameObject select 上添加所需功能的脚本。下面的示例
void Start() { }
void Update() { }
public void button1()
{
Debug.Log("Button3");
}
public void button2()
{
Debug.Log("Button1");
}
public void button3()
{
Debug.Log("Button3");
}
注意:button1、button2 和 button3 是 3 个独立按钮的功能
然后在你的 unity Inspector 里面:
- Select 带有按钮功能的脚本。
- 将您想要的方法分配给您的按钮。
在此之后运行您的场景和按钮将正确调用分配的方法。
我的 UI 上有大约 10 个按钮,我必须检查触摸了哪一个。我正在使用以下逻辑并且工作正常,但现在由于某种原因我收到此错误:
NullReferenceException: Object reference not set to an instance of an object
DetectButton.Start () (at Assets/Scripts/DetectButton.cs:14)
知道会发生什么吗?这是我的代码(附在 canvas 上),我使用的是 Unity 版本 5.1.0f3。如果您需要任何其他信息,我很乐意提供,提前致谢
void Start()
{
this.GetComponent<Button>().onClick.AddListener(() =>
{
if (this.name == "btnJogadores2")
{
print ("2 jogadores");
jogadores = 2;
}
//QuantidadeJogadores(this.name);
//QuantidadePartidas(this.name);
});
}
代码未经测试,但它应该可以让您开始获取所有按钮。
void Start() {
var buttons = this.GetComponents<Button> ();
foreach(var button in buttons) {
button.onClick.AddListener(() = > {
if (this.name == "btnJogadores2") {
print("2 jogadores");
jogadores = 2;
}
//QuantidadeJogadores(this.name);
//QuantidadePartidas(this.name);
});
}
}
实际上很难区分按钮。 更实际的方法是制作 10 个游戏对象(Canvas 的子对象)并将您的脚本附加到每个对象。
你不必像现在这样去做。
一个更简单的好做法是为 canvas 中的每个按钮创建 10 个单独的游戏对象。然后为其中的所有按钮创建一个包含 10 个独立函数的脚本。将该脚本附加到您 canvas。然后在按钮 GameObject select 上添加所需功能的脚本。下面的示例
void Start() { }
void Update() { }
public void button1()
{
Debug.Log("Button3");
}
public void button2()
{
Debug.Log("Button1");
}
public void button3()
{
Debug.Log("Button3");
}
注意:button1、button2 和 button3 是 3 个独立按钮的功能
然后在你的 unity Inspector 里面:
- Select 带有按钮功能的脚本。
- 将您想要的方法分配给您的按钮。
在此之后运行您的场景和按钮将正确调用分配的方法。