Unity3d 如果语句出错

Unity3d 如果语句出错,unity3d,unityscript,Unity3d,Unityscript,这在Update函数中。请原谅,那只是一张绷带。这是一款赛车游戏,分阶段进行意味着准备就绪。一旦两辆车都准备好了,比赛还没有开始,应该会有5秒的延迟,然后会出现“GO 1”(我添加了stupidCounter作为调试工具)。然后设置开始时间。然后它将Racing设置为true,以防止它再次跳回该if语句 问题是它每帧都会在if语句中跳回;打印:GO1 GO2 GO3等 “GO”一词在任何其他脚本中都没有提及。 “Racing”布尔值在任何脚本中都没有提到 这是我的密码: if(Staged &a

这在Update函数中。请原谅,那只是一张绷带。这是一款赛车游戏,分阶段进行意味着准备就绪。一旦两辆车都准备好了,比赛还没有开始,应该会有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;
}

也许这是赛车的范围问题,我试着把它改成了私人赛车。没有。如果它是跳回,如果它将等待5秒每一次。但它不是,它和等待几秒钟有关,我把它注释掉了,它没有继续计数,所以我没有回答!perfect@TroyStafford很乐意帮忙!