我想 运行 一个 if 语句 seconds.How 可以吗?
I want to run a if statement for few seconds.How can I do it?
我想在 if 语句中编写代码 运行 几秒钟 我想
每当我按下 "e" 并在几秒后再次使 BoxCollider.enabled=true 时 BoxCollider.enabled=false 。我该怎么做?
我尝试了 invoke 方法,但它不起作用。
if (Input.GetKeyDown("e"))
{
BoxCollider.enabled = false;
Invoke("enable", 2f);
}
void enable()
{
BoxCollider.enabled = true;
}
嗯,我和你一样是初学者,但我想我有办法解决你的问题
public float waitTime = 0f;
public void Update()
{
waitTime = waitTime + Time.deltaTime;
if (Input.GetKeyDown("e"))
{
BoxCollider.enabled = false;
waitTime = 0;
}
if (waitTime >= 2)
{
BoxCollider.enabled = true;
}
}
我在这里所做的是我创建了一个计数秒数的变量,并在用户按下 E 后将其重置为 0,然后当它变为 2 时 boxCollider.enabeled = true
您可以使用计时器。
试试下面的例子:
class Program
{
static bool boxCollider = true;
static Timer aTimer;
static void Main(string[] args)
{
var key = Console.ReadKey();
if (key.Key == ConsoleKey.E)
{
Console.WriteLine("The key was pressed at {0:HH:mm:ss.fff}", DateTime.Now);
boxCollider = true;
aTimer = new System.Timers.Timer(2000);
aTimer.Elapsed += onTimerEnded;
aTimer.Enabled = true;
}
Console.ReadLine();
}
private static void onTimerEnded(object sender, ElapsedEventArgs e)
{
Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}",
e.SignalTime);
Enable();
aTimer.Enabled = false;
aTimer.Dispose();
}
private static void Enable()
{
boxCollider = true;
}
BoxCollider 将在达到间隔后重置。
最优雅的方式是使用协程
if (Input.GetKeyDown("e")){
BoxCollider.enabled = false;
StartCoroutine(EnableCoroutine());
}
...
IEnumerator EnableCoroutine() {
//A coroutine can 'wait' until something is done
//yield return null; would wait a single frame
yield return new WaitForSeconds(2);
//After 2 seconds the following code will be executed
BoxCollider.enabled = true;
}
我想在 if 语句中编写代码 运行 几秒钟 我想 每当我按下 "e" 并在几秒后再次使 BoxCollider.enabled=true 时 BoxCollider.enabled=false 。我该怎么做?
我尝试了 invoke 方法,但它不起作用。
if (Input.GetKeyDown("e"))
{
BoxCollider.enabled = false;
Invoke("enable", 2f);
}
void enable()
{
BoxCollider.enabled = true;
}
嗯,我和你一样是初学者,但我想我有办法解决你的问题
public float waitTime = 0f;
public void Update()
{
waitTime = waitTime + Time.deltaTime;
if (Input.GetKeyDown("e"))
{
BoxCollider.enabled = false;
waitTime = 0;
}
if (waitTime >= 2)
{
BoxCollider.enabled = true;
}
}
我在这里所做的是我创建了一个计数秒数的变量,并在用户按下 E 后将其重置为 0,然后当它变为 2 时 boxCollider.enabeled = true
您可以使用计时器。
试试下面的例子:
class Program
{
static bool boxCollider = true;
static Timer aTimer;
static void Main(string[] args)
{
var key = Console.ReadKey();
if (key.Key == ConsoleKey.E)
{
Console.WriteLine("The key was pressed at {0:HH:mm:ss.fff}", DateTime.Now);
boxCollider = true;
aTimer = new System.Timers.Timer(2000);
aTimer.Elapsed += onTimerEnded;
aTimer.Enabled = true;
}
Console.ReadLine();
}
private static void onTimerEnded(object sender, ElapsedEventArgs e)
{
Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}",
e.SignalTime);
Enable();
aTimer.Enabled = false;
aTimer.Dispose();
}
private static void Enable()
{
boxCollider = true;
}
BoxCollider 将在达到间隔后重置。
最优雅的方式是使用协程
if (Input.GetKeyDown("e")){
BoxCollider.enabled = false;
StartCoroutine(EnableCoroutine());
}
...
IEnumerator EnableCoroutine() {
//A coroutine can 'wait' until something is done
//yield return null; would wait a single frame
yield return new WaitForSeconds(2);
//After 2 seconds the following code will be executed
BoxCollider.enabled = true;
}