如果声明代理

时间:2015-07-20 05:24:19

标签: unity3d unityscript

这是在Update功能中。请原谅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;
}

1 个答案:

答案 0 :(得分:2)

我假设你的功能是一个协程。您的代码中的问题可能是因为您在每个更新框架中调用协程。您需要添加一个检查来仅调用一次协程,或者使用您自己的计时器来处理它而不是协程。

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

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;
         }
    }
}

或者,如果您想使用Coroutines,它就会像这样

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;
}