Я делаю 2D гоночную игру сверху вниз, которая измеряет время, необходимое игроку, чтобы закончить трек, и я заметил, что даже на абсолютно прямой трассе время финиша не всегда одинаково (автомобиль ускоряется автоматически).
Я пытался установить для обоих максимально допустимого временного шага и фиксированного временного шага одно и то же значение (оба равны 0,02), не уверен, что это как-то повлияет на это.
Для таймера, который я используюSystem.Diagnostics.Stopwatch
, который начинается по методу Start()
void Start()
{
checkpoints = GetComponentsInChildren<Checkpoint>();
sw.Start(); //stopwatch starts
Load();
checkpointsReached = 1;
nextCheckpoint = checkpoints[checkpointsReached];
}
и останавливается, когда автомобиль касается спускового крючка, помеченного как финиш.
internal void CheckpointReached(Checkpoint checkpoint)
{
if (nextCheckpoint != checkpoint)
return;
checkpointsReached++;
if (checkpoint.isFinish)
{
sw.Stop(); //stopwatch stops after reaching Finish
EndRace();
return;
}
if (checkpointsReached == checkpoints.Length)
{
checkpointsReached = 0;
}
nextCheckpoint = checkpoints[checkpointsReached];
}
Чтобы получить время гонки, я использую sw.Elapsed.ToString("ss','ffff");
Ускорение машины выполняется другим сценарием
void FixedUpdate()
{
Rigidbody2D rb = GetComponent<Rigidbody2D>();
rb.AddForce(transform.up * speedForce); //acceleration
//turning and stuff
rb.angularVelocity = Input.GetAxis("Horizontal") * torqueForce;
rb.velocity = ForwardVelocity() + RightVelocity() * driftFactor;
Я хочу, чтобы игра была последовательной и честной, поэтому я ожидаю, что время финиша на прямой дороге будет всегда одинаковым, носейчас времена находятся в диапазоне +/- 0,02 с друг от друга.