Unity如何在C#脚本中获取按钮输入?

问题描述 投票:0回答:1

我正在写一个游戏,其中包括组合系统(这是一个脚本)。目前我的输入是按键,但我想改变它,让它采用按键输入。

下面是输入代码。

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

关于UI按钮的是,它们需要一个onPressed()命令, 但我不能做一个函数来提供这个输入,因为它已经在一个更新函数中了。如果有任何帮助,我将不胜感激。

visual-studio unity3d game-engine
1个回答
1
投票

你可以为按钮添加一个委托,当它被点击时,就可以调用它。

例如,你可以为按钮添加一个委托,当它被点击时调用它。

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

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

你必须把这个脚本附加到你的Button gameobject上。

你也可以直接通过检查器将事件函数直接添加到你的按钮上,但是这个函数应该是 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);
}

EDIT: 如果你想要的是编辑你现有的战斗脚本(而不是创建一个新的单独组件), 那么你必须把你的按钮赋予你的战斗脚本. 那就是 buttonE, buttonR你必须通过unity检查器给它一个参考。如果它已经做了,那么你可以自由地删除你的 Update() 功能,如果没有其他与之相关的东西。

© www.soinside.com 2019 - 2024. All rights reserved.