【问题标题】:Unity setting Button's onClick in scriptUnity在脚本中设置Button的onClick
【发布时间】:2021-09-10 06:16:50
【问题描述】:

我正在使用 Unity 2020.3 并基本上制作了一个问答游戏。

假设我有这两个功能:

public void TrueAnswer()
{
    Debug.Log("True !");
}

public void FalseAnswer()
{
    Debug.Log("False !");
}

在每个问题中,真正答案的按钮都在变化(例如,在第 x 个问题中,答案在第一个按钮中,但在第 x+1 个问题中,答案在第三个按钮中)。所以,我应该在每个问题中更改答案按钮 onClick 事件。根据我的研究,有一些方法:

using UnityEngine.UI;

m_YourFirstButton.onClick.AddListener(TaskOnClick);
m_YourSecondButton.onClick.AddListener(delegate {TaskWithParameters("Hello"); });
m_YourThirdButton.onClick.AddListener(() => ButtonClicked(42));
m_YourThirdButton.onClick.AddListener(TaskOnClick);

(来自 Unity 文档,版本 2019.1)

using UnityEngine.UIElements;

button.GetComponent<Button>().clicked += ButtonClicked;

(这是我从 Unity 文档版本 2020.3 以及 VS 2019 IntelliSense 建议我使用“clicked”事件的理解。2020.3 也有 onClicked 事件,但它已过时)

首先,我使用第一种方法设置按钮 onClick 事件,但它不起作用。 然后,我阅读了文档并尝试了第二个解决方案,它也没有工作,但我得到一个错误:

ArgumentException: GetComponent requires that the requested component 'Button' derives from MonoBehaviour or Component or is an interface.

我明白错误是什么,但我很困惑。在 Unity 2019.1 之后,我在 Unity 文档中找不到 UnityEngine.UI 库,但如果我在脚本中使用它,我可以毫无错误地使用它。所以取决于我必须使用 UnityEngine.UIElements 库的文档,但如果我使用,我怎样才能让按钮派生自 MonoBehaviour 或其他?

【问题讨论】:

标签: c# unity3d


【解决方案1】:

我认为您根本不需要更改按钮单击事件。
相反,它们可以是一个“静态”点击事件,返回点击了哪个按钮索引。

[0] Button 1 -> ButtonClicked(0)
[1] Button 2 -> ButtonClicked(1)
[2] Button 3 -> ButtonClicked(2)

然后你可以在一个数组中得到答案

[0] Answer 1
[1] Answer 2
[2] Answer 3

并使用点击按钮索引来确定选择了哪个答案。

当您提出新问题时,您所要做的就是使用相关答案(以您希望的任何顺序)创建(或替换其值)答案数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 2016-07-28
    • 2012-07-28
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    相关资源
    最近更新 更多