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