【问题标题】:Camera Move and Rotate Follow Player very jerky相机移动和旋转跟随玩家非常生涩
【发布时间】:2015-11-05 02:40:28
【问题描述】:

我让一个角色在一个圆的表面上移动。我让相机移动和旋转跟随角色。但是相机移动和旋转非常不稳定。如果我增加第三个参数的值,冲击就会增加。并减少第三个参数的值,相机不旋转以跟上角色。帮我修一下

我的代码相机跟随玩家

public class CameraFollow : MonoBehaviour
{
    public Transform player;
    GameController gc;
    public float speed = 2;
    Vector3 pos = new Vector3 (0, 0, -10);
    // Use this for initialization
    void Start ()
    {
        gc = FindObjectOfType (typeof(GameController)) as GameController;
    }
    void FixedUpdate ()
    {
        if (gc.gameState == GameController.GameState.playing || gc.gameState == GameController.GameState.changeWave) {
            transform.position = player.position + pos;
            transform.rotation = Quaternion.Slerp (transform.rotation, 
                                                   player.transform.rotation, 
                                                   speed * Time.deltaTime);
        }
    }
}

【问题讨论】:

    标签: unity3d game-physics


    【解决方案1】:

    FixedUpdate 内设置变换的位置肯定是一个危险信号,尤其是当您报告它“生涩”时。与显示的帧相比,固定更新以不规则的间隔发生。这是因为 Physics 需要使用固定的时间步长进行更新。出现这种情况的原因超出了这个问题的范围。

    长话短说,尝试将FixedUpdate 更改为Update,这应该可以解决看起来“生涩”的问题。

    如果这不起作用,请告诉我,我会寻找其他可能的原因。

    【讨论】:

    • 我已将 FixedUpdate 更改为 Update 但看起来很生涩。实际上我并不担心相机移动到角色。我关于角色上相机旋转的问题(非常生涩)
    • 好的,我找到了问题所在。你的 Slerping 不正确。 Slerp函数调用的第三个参数是起点和终点的比值。例如,如果您想移动到传递给函数的第一个四元数和第二个四元数之间的中间方向,您可以将值 0.5f 作为第三个参数传递给函数。
    • 哦!我检查了我的游戏。最初,当我的玩家以旋转 Z 为 0 开始游戏时。当我滚动直角 Z 为 360 度(即相机抖动时)并开始下降时。我认为旋转 Z 的突然变化已经造成了生涩的凸轮
    • 只有当旋转 Z 为 0 时切换旋转 Z 为 360 和相反的时候会产生抖动的相机
    • 我该如何解决这个问题:(
    【解决方案2】:

    如果您使用 Rigidbody2D 移动角色,请确保将其 Interpolate 属性设置为“Interpolate”。这应该可以解决它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多