繁体   English   中英

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

[英]Unity how to get button input inside C# script?

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

这是输入代码:

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

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

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

例子:

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

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

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

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


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

[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() function。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM