【发布时间】:2016-10-14 07:17:50
【问题描述】:
当事件发生时,我会在运行时加载 Canvas 预制件。画布内部只有一个面板,而面板又具有 2 个按钮。我正在尝试将 OnClick 事件添加到脚本中的这两个按钮,但它只适用于第一个按钮! 我有以下两行代码一个接一个:
GameObject.Find("RestartButton").GetComponent<Button>().onClick.AddListener(() => RestartClicked());
GameObject.Find("ViewButton").GetComponent<Button>().onClick.AddListener(() => ViewClicked());
回调仅适用于 RestartButton,不适用于 ViewButton。 这可能是一件非常小的事情,但我广泛搜索了 Google 和 Bing,但仍然一无所知,因此我们将不胜感激。
谢谢!
编辑:
脚本实例化预制件并尝试通过 GameObject.Find() 引用预制件中的两个按钮,因为一旦调用了 Instantiate,Canvas 就应该在层次结构中处于活动状态。 我还打开了将按钮附加到侦听器以进行调试的代码部分。我认为它根本不附加听众。
void Start () {
SetupScene();
var prefab = Resources.Load("RestartOrViewPrefab");
if (prefab == null)
{
Debug.LogAssertion("Prefab missing!");
return;
}
restartCanvas = (GameObject)Instantiate(prefab);
Button btn = GameObject.Find("ViewButton").GetComponent<Button>();
btn.onClick.RemoveAllListeners();
btn.onClick.AddListener(() => ViewToggle());
Button btn2 = GameObject.Find("RestartButton").GetComponent<Button>();
btn2.onClick.AddListener(() => RestartClicked());
}
private void RestartClicked()
{
Debug.Log("RESTARTING");
SetupScene();
}
private void ViewToggle()
{
Debug.Log("TOGGLE");
if (freshStart)
{
//Something here
freshStart = false;
}
else
{
//Something else here
freshStart = true;
}
}
【问题讨论】:
-
我看不出你的代码有什么问题。您可以发布其余的代码吗?也许还有其他我们不知道的事情正在发生
-
可以贴出ViewClicked()的代码吗?如何判断回调是否无效?
-
当然。很抱歉只发布了两行代码。我认为解释会公正。我正在更新我的帖子。
标签: user-interface button unity3d onclick