这是在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;
}
答案 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;
}