Джиттер камеры / телепорт игрока - PullRequest
0 голосов
/ 13 января 2019

Я использую Hardbody.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);

}

Camera Script

 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);


}

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Я наконец разобрался, что с ним не так, что-то про поворот камеры в исправленном обновлении. Я переместил его для обновления, и теперь он работает нормально

0 голосов
/ 14 января 2019

проблема в том, что ваша логика движения реализована в FixedUpdate, но вы используете time.deltaTime. Вы должны использовать версию fixedDeltaTime. Также не пытайтесь получить входные данные внутри FixedUpdate, которые также могут вызвать дрожание и заикание / скачки объектов.

Вместо этого получите Input from Update и используйте переменные, чтобы передать его внутри FixedUpdate.

Последнее, посмотрите на RigidBody для интерполяции / экстраполяции в зависимости от настроек сцены и камеры, это также может помочь.

...