C# Unity2D移动Windows和Android之间的速度差异

C# Unity2D移动Windows和Android之间的速度差异,c#,android,unity3d,C#,Android,Unity3d,我正在开发一款无限跑步器,它的移动速度会随着时间的推移而加快。但由于某些原因,Android上的移动速度/加速度与Windows上的不同。e、 10秒后,我的移动速度在Windows上是10,但在Android上仍然是8,我不知道为什么 以下是移动代码: void LateUpdate() { //Movement Vector3 movement = new Vector3(2f, 0f, 0f); transform.position += movement * Ti

我正在开发一款无限跑步器,它的移动速度会随着时间的推移而加快。但由于某些原因,Android上的移动速度/加速度与Windows上的不同。e、 10秒后,我的移动速度在Windows上是10,但在Android上仍然是8,我不知道为什么

以下是移动代码:

void LateUpdate()
{
    //Movement
    Vector3 movement = new Vector3(2f, 0f, 0f);
    transform.position += movement * Time.deltaTime * moveSpeed;
    
    //Max Speed, stop acceleration at 25
    if(moveSpeed <= 25){
        moveSpeed = moveSpeed * acceleration;
    }else{
        moveSpeed = moveSpeed * 1;
    }
    speedText.text = moveSpeed.ToString();

    Jump();
    CheckSpeed();   

}
void LateUpdate()
{
//运动
矢量3移动=新矢量3(2f、0f、0f);
transform.position+=移动*时间.延迟*移动速度;
//最大速度,25时停止加速

如果(moveSpeedandroid版本的运行帧速率可能低于windows版本。由于您在不调整帧速率的情况下将每帧的速度相乘,因此在较低的帧速率下播放时,速度会增加得较慢。有两种解决方法


解决方案1 将
moveSpeed
acceleration
乘以
Time.deltaTime
的幂,而不仅仅是
acceleration

if(moveSpeed <= 25){
    moveSpeed = moveSpeed * Mathf.Pow(acceleration, Time.deltaTime);
}
LateUpdate
每帧运行一次时,
FixedUpdate
以固定速度运行。因此
moveSpeed
将以相同的速度加速,而不考虑帧速率


另外,您可以将
moveSpeed=moveSpeed*
更改为
moveSpeed*=
。您也不需要

else{
    moveSpeed = moveSpeed * 1;
}

因为
moveSpeed
的值在任何一种情况下都是相同的。

你的速度方程是错误的。速度=速度+(加速度*时间)。你的意思是“moveSpeed=moveSpeed*加速度”?我尝试了你的方法,但他只是停止了移动。你必须乘以时间。deltaTime。在你的两台设备上它不同的原因是因为它们有不同的帧速率。线条应该是
movespeed+=加速度*时间。deltaTime*加速度比率
你需要为加速度比率创建一个新的变量控制它加速的速度。你可能会注意到这看起来像你的位置,因为它是!加速度是速度随时间变化的速率,就像速度是位置随时间变化的速率。谢谢!我尝试了第二种解决方案,它成功了^^
else{
    moveSpeed = moveSpeed * 1;
}