一个简单的项目在 phone 上抖动并且在具有相同 FPS 的编辑器中运行良好

A simple project shakes on the phone and works fine in the Editor with the same FPS

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

在phone的视频中,你可以看到这个星球是如何快速上下颠簸的(实际上,一个箭头在颠簸)。

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

    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.Rotate 这样的电话(或者 Transform.Rotate 左右)

更好的是,只需设置速度或旋转速度并让引擎完成工作。

我添加了 transform.Rotate() 和 transform.Translate() 但没有帮助。 我不明白它是如何工作的以及为什么问题只出现在 phone 上,但我找到了解决方案。

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

  1. 箭头相对于行星中心的旋转。
  2. 按播放器转动箭头。
  3. 更正 行星中心到箭头的距离。
  4. 运动 沿其自身轴 Z 的箭头。

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

但我将其更改为: 2 然后 3 + 4 然后 1

现在不抽搐了。感谢大家。