首页 > 解决方案 > Unity如何在C#脚本中获取按钮输入?

问题描述

我正在编写一个包含组合系统的游戏(它是一个脚本)。我目前有它,所以输入是键,但我想改变它,所以它需要按下按钮输入。

这是输入代码:

void Update() {
         if (Input.GetKeyDown(KeyCode.E))
            input = new ComboInput(AttackType.heavy);
         if (Input.GetKeyDown(KeyCode.R))
            input = new ComboInput(AttackType.light);
}

UI 按钮的问题在于它们采用 onPressed() 命令,但我无法创建一个函数来提供此输入,因为它已经在更新函数中。任何帮助,将不胜感激。

标签: c#unity3d

解决方案


您可以为按钮添加一个委托,以便在单击时调用它。

例子:

private void Awake()
{
    Button buttonComponent = GetComponent<Button>();
    buttonComponent.onClick.AddListener(OnButtonClicked)
}

private void OnButtonClicked()
{
    Debug.Log("The button has clicked!");
}

您必须将此脚本附加到您的 Button 游戏对象。

您也可以通过检查器直接将事件功能添加到您的按钮,但该功能应该是public为了被检查器访问。如果您不希望其他类看到您的功能,那么上述将是您的最佳选择。


就你而言,这是我的建议:

[SerializeField]
private Button buttonE, buttonR;

private ComboInput input;

private void Awake()
{
    buttonE.onClick.AddListener(OnButtonClicked_E);
    buttonR.onClick.AddListener(OnButtonClicked_R);
}

private void OnButtonClicked_E()
{
    input = new ComboInput(AttackType.heavy);
}

private void OnButtonClicked_R()
{
    input = new ComboInput(AttackType.light);
}

编辑:如果您想要编辑现有的战斗脚本(而不是创建新的单个组件),那么您必须将按钮提供给您的战斗脚本。也就是说buttonE, buttonR,您必须通过统一检查员提供参考。如果它已经完成,那么您可以自由地删除您的Update()功能,如果没有其他相关的东西。


推荐阅读