【问题标题】:Unity Camera Jitter / Player TeleportUnity 相机抖动/玩家传送
【发布时间】:2019-01-13 02:58:29
【问题描述】:

我使用rigidbody.MovePosition 来围绕我的角色移动,并有一个摄像机跟随它。问题是当我突然切换方向时,玩家会传送一点,而不是在相反的运动方向上平稳移动。播放器和相机的脚本设置为 FixedUpdate ,如果我尝试将相机移动到 LateUpdate ,那么整个事情就会抖动很多。

播放器脚本:

private void Start()
{
    m_Rb = GetComponent<Rigidbody>();
    m_InputAxisName = "Vertical" + m_playerNumber;
    m_StrafeAxisName = "Horizontal" + m_playerNumber;


}
private void FixedUpdate()
{
    m_InputAxisValue = Input.GetAxis(m_InputAxisName);
    m_StrafeAxisValue = Input.GetAxis(m_StrafeAxisName);

    //Movement
    Vector3 movement = (transform.forward * m_InputAxisValue * m_Speed * Time.deltaTime) + (transform.right * m_StrafeAxisValue * m_Speed * Time.deltaTime);

    m_Rb.MovePosition(m_Rb.position + movement);

}

相机脚本

 void FixedUpdate () {

          m_NewPos = m_player.transform.position + m_offset;

    if (m_Rotate)
    {
        Quaternion newRot = Quaternion.AngleAxis(Input.GetAxis("Mouse X") * m_rotSpeed, Vector3.up);
        m_offset = newRot * m_offset;
    }


    transform.position = Vector3.SmoothDamp(transform.position, m_NewPos, ref m_MoveSpeed, m_DampTime); ;

    if (m_Rotate)
        transform.LookAt(m_player);


}

【问题讨论】:

  • 您的玩家可能没有传送,但相机在切换到相反方向时出现问题。过去,SmoothDamp 存在问题,无法接收“一致”输入,即从一种平滑类型切换到另一种类型时,平滑会导致问题。我认为您的问题可能类似。

标签: unity3d camera game-physics


【解决方案1】:

问题是您的运动逻辑是在 FixedUpdate 中实现的,但您需要 time.deltaTime。您必须使用 fixedDeltaTime 版本。 也不要尝试在 FixedUpdate 中获取 Input,这也会导致对象的抖动和卡顿/跳跃。

而是从更新中获取输入并使用变量将其传递到固定更新中。

最后一个,根据您的场景设置和相机查看您的 RigidBody 进行插值/外插,这也会有所帮助。

【讨论】:

  • 如果我没记错 Time.deltaTime 在 FixedUpdate Unity 中使用时“自动”将其视为 fixedDeltaTime。
  • 是的,没错,过去我遇到的问题并非如此。当您开始缩放时间时,它会变得非常令人毛骨悚然,并且 Time.DeltaTime 在每个 Fixed Tick 的时间都不正确。
【解决方案2】:

我终于弄清楚它出了什么问题,关于固定更新中相机旋转的问题。我将其移至更新,现在可以正常工作了

【讨论】:

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