一个简单的项目在手机上抖动,在编辑器中使用相同的FPS也能很好地工作



这里有两个来自编辑器和手机的视频:https://drive.google.com/drive/folders/1gs0Ik9EojhbbPUZh0lNmPigVHWpAjERi?usp=sharing

在手机上的视频中,你可以看到这个星球是如何快速上下跳动的(事实上,一个箭头在跳动(。

这里的代码是箭头朝向行星中心,用于控制和移动。

private void Update()
{
body.transform.rotation = Quaternion.FromToRotation(body.transform.up, (body.transform.position - transform.position).normalized) * body.transform.rotation * Quaternion.Euler(0, body.GetComponent<ArrowController>().Joystick.Horizontal  * 110 * Time.deltaTime, 0);
if (Math.Abs((body.transform.position - transform.position).magnitude - body.OrbitRadius) > 0.01)
{
float shift = body.OrbitRadius - (body.transform.position - transform.position).magnitude;
body.transform.position += body.transform.up * shift;
}
body.transform.position += body.transform.forward * Speed * Time.deltaTime;
}

为什么会发生这种情况?

通常,不要设置对象的位置、旋转。

使用类似docs.unity3d.com/ScriptReference/Transform.Translate.html或Transform.Regate(或者Transform.RegateRound(的调用

更好的是,只需设置速度或旋转速度,让发动机完成工作。

我添加了转换。旋转((并变换。翻译((,但没有帮助。我不明白它是如何工作的,也不明白为什么问题只出现在电话上,但我找到了解决方案。

我的代码可以分为4个操作:

  1. 箭头相对于行星中心的旋转
  2. 从按压玩家开始转动箭头
  3. 修正从行星中心到箭头的距离
  4. 运动沿着其自身的轴线Z的箭头的方向

最初,代码是这样运行的:1+2然后3然后4

但我把它改成了:2然后3+4然后1

现在它没有抽搐。谢谢大家。

相关内容

  • 没有找到相关文章

最新更新