如何在 Unity C# 中将按钮按住作为输入

Pro*_*ton -1 c# time unity-game-engine

我正在尝试创建一种可以采用“按住“E”进行交互”类型的输入的情况。我的第一个想法是,按住按钮后启动计时器。计时器达到 700 毫秒后,采取行动。但问题是我不知道如何用 C# 编写它,因为我是这门语言的新手。任何其他方法也值得赞赏。

我在这里添加伪代码

//pseudocode
//inside the update function

if (e is pressed)
{
   start timer;
   if (timer.time == 700)
   {
      Debug.Log("E is pressed for quite some time");
   }
}
Run Code Online (Sandbox Code Playgroud)

Wzr*_*zrd 5

我要做的是使用协程

当用户按下按钮时,协程将启动,如果用户停止按下按钮,协程将停止。

为此,您的代码可能类似于:

using System.Collections;

[SerializeField] int time;

void Update ()
{
    if (Input.GetKeyDown(KeyCode.E)) StartCoroutine(Action());
    if (Input.GetKeyUp(KeyCode.E)) StopCoroutine(Action());
}

IEnumerator Action ()
{
    yield return new WaitForSeconds(time);

    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

感谢 derHugo 在我的示例代码中发现了错误 - 现在已对其进行了编辑。

当然,还有其他方法可以完成您想做的事情,但我认为协程是您最好的选择,因为当用户按住时,在您的情况下,向用户添加一些反馈将非常容易, 'E'。例如,您可以填充图像以创建与此类似的效果:

示例图片

而且,即使您不想这样做 - 协程仍然是一个不错的选择。

希望这可以帮助!