C# 如何在Unity C中将按钮保持作为输入#
我试图创造一种情况,在这种情况下,我可以采取“按住“E”进行交互”类型的输入。我的第一个想法是,按下按钮后启动计时器。计时器达到700毫秒后,采取行动。但问题是,我不知道如何用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
//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。我会相应地更新我的答案。谢谢我做了一些关于合作项目的研究,这对我很有用。多谢各位