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;
}
这是在更新函数中。请原谅 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;
}