Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Unity C中将按钮保持作为输入#_C#_Unity3d_Time - Fatal编程技术网

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

C# 如何在Unity C中将按钮保持作为输入#,c#,unity3d,time,C#,Unity3d,Time,我试图创造一种情况,在这种情况下,我可以采取“按住“E”进行交互”类型的输入。我的第一个想法是,按下按钮后启动计时器。计时器达到700毫秒后,采取行动。但问题是,我不知道如何用c#写,因为我对这门语言是新手。任何其他方法也值得赞赏 我在这里添加伪代码 //pseudocode //inside the update function if (e is pressed) { start timer; if (timer.time == 700) { Debug.Lo

我试图创造一种情况,在这种情况下,我可以采取“按住“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");
   }
}
我要做的是使用一个

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

为此,您的代码可以如下所示:

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”键时,向他们添加一些反馈会非常容易,在你的例子中是“E”。例如,您可以创建类似以下内容的效果:

而且,好吧,即使你不想这样做-协同程序仍然是一个不错的选择


希望这有帮助

@Chase我想OP指的是鼠标或键盘上的一个按钮,或者是一个UI.button。。您链接的问题与Unity完全无关……请注意,
StopCoroutine
不会以这种方式工作,因为您传递了不同的参数。实际上,我更愿意使用一个无参数例程,并从Inspector字段获取时间阈值,这样可以避免这种情况;)@德胡戈真的,mb。我会相应地更新我的答案。谢谢我做了一些关于合作项目的研究,这对我很有用。多谢各位