gpt4 book ai didi

c# - 在完全笔直的赛道上不一致的比赛时间

转载 作者:行者123 更新时间:2023-11-30 21:30:06 25 4
gpt4 key购买 nike

我正在制作一款 2D topdown 赛车游戏,该游戏测量玩家完成赛道所需的时间,我注意到即使在完全笔直的赛道上,完成时间也不总是相同(汽车会自动加速)。

我试过将 Maximum allowed timestep 和 Fixed Timestep 设置为相同的值(均为 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 秒。

最佳答案

秒表是一种非常精确的时间测量设备,如果您追求 50 FPS,则 0.02 秒等于一帧。 Unity 的时间系统是离散的,并且仅在新帧(或物理帧)开始时递增,因此没有任何“在后台移动”,您不能期望精度高于帧 - Unity 中没有子帧时间。

请注意,如果您使用秒表进行测量,那么您是在进行硬实时测量,这意味着如果您的游戏瞬间卡顿,则会增加秒表时间,但不会增加游戏时间。通常你应该使用 UnityEngine.Time.time 来测量游戏时间,秒表通常用于性能诊断(这就是为什么它在 System.Diagnostics 命名空间下),而不是用于业务逻辑。

此外,在正常情况下,人类无法“看到”0.02 秒的差异。

关于c# - 在完全笔直的赛道上不一致的比赛时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54748365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com