unity3d 如何在Unity C#中将按钮保持作为输入

wvyml7n5  于 2023-04-21  发布在  C#
关注(0)|答案(1)|浏览(130)

我试图创建一个情况下,我可以采取**“按住'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");
   }
}
myss37ts

myss37ts1#

我会使用coroutine
当用户按下按钮时,协程将启动,并且如果用户停止按下按钮,则协程将停止。
要做到这一点,你的代码可能看起来像这样:

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
}
  • 感谢derHugo在我的示例代码中发现了一个错误-现在已经编辑好了。*

当然,还有其他方法可以实现你想做的事情,但我认为协程是你最好的选择,因为当用户按住“E”时,它会非常容易地向用户添加一些反馈。例如,你可以fill an image来创建类似于以下的效果:

而且,即使你不想这样做,协同程序仍然是一个很好的选择。
希望这有帮助!

相关问题