C# Unity2D移动Windows和Android之间的速度差异
我正在开发一款无限跑步器,它的移动速度会随着时间的推移而加快。但由于某些原因,Android上的移动速度/加速度与Windows上的不同。e、 10秒后,我的移动速度在Windows上是10,但在Android上仍然是8,我不知道为什么 以下是移动代码: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
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;
}