if 语句起作用

if Statement Acting Up

这是在更新函数中。请原谅 brakeTorque 的东西,这只是暂时的创可贴。这是一款飙车游戏,Staged的意思是蓄势待发。一旦两辆车都上演了,比赛还没有开始,那么应该有 5 秒的延迟,然后 "GO 1" 应该出现(我添加了 stupidCounter 作为调试工具)。然后它设置开始时间。然后它将 Racing 设置为 true 以防止它再次跳回此 if 语句。

问题是它在 if 语句中每一帧都跳回;打印:GO1 GO2 GO3

"GO" 这个词在任何其他脚本中都没有被提及。 "Racing" 布尔值在任何脚本的其他任何地方都没有提及。

这是我的代码:

if(Staged && OtherCarStaged() && !Racing)
{
    RearRightWheel.brakeTorque = 10000;
    RearLeftWheel.brakeTorque = 10000;
    FrontRightWheel.brakeTorque = 10000;
    FrontLeftWheel.brakeTorque = 10000;
    yield WaitForSeconds(5);
    stupidCounter += 1;
    Debug.Log("GO " + stupidCounter);
    mainTimerStart = Time.realtimeSinceStartup;
    Racing = true;
}

我假设你的函数是协程。您的代码中的问题可能是因为您在每个更新帧中都调用协程。您要么需要添加检查以仅调用协程一次,要么使用您自己的计时器来处理此问题而不是协程。

根据您提到的要求,我认为您的代码应该是这样的

var timeLeft : float = 5;
function Update()
{
    StartCountdown();
}

function StartCountdown()
{
    if(Staged && OtherCarStaged() && !Racing)
    {
         // your stuff
         timeLeft -= Time.deltaTime;
         if(timeLeft <= 0)
         { 
             Debug.Log("GO");
             mainTimerStart = Time.realtimeSinceStartup;
             Racing = true;
         }
    }
}

或者,如果你想使用协程,它会像这样

function Update()
{
    if(!countdownStarted && Staged && OtherCarStaged())
        StartCoroutine(StartCountdown(5));
}

var countdownStarted : bool = false;
function StartCountdown(float time)
{
    countdownStarted = true;
    yield WaitForSeconds(time);

    Debug.Log("GO ");
    mainTimerStart = Time.realtimeSinceStartup;
    Racing = true;
}