繁体   English   中英

Unity 3D-玩家触摸墙壁后不断移动

[英]Unity 3d - player is moving constantly after touching a wall

当我的播放器对象碰到墙后,它有时会自行移动和旋转。 我试图增加播放器对象的重量并有所帮助,但是我认为这不是一个好方法,因为微小的运动永远不会消失。

播放器是带有盒式对撞机的刚体。

isKinematic-错误; useGravity-true; XYZ旋转固定,Y坐标位置固定。

墙壁有箱式撞撞机,但没有刚体。 地面没有对撞机,因为Y位置固定且玩家对象没有接触地面。

游戏是基于网络的,所以我也将光子刚体视图组件也连接到了玩家。

移动玩家的代码(C#):

public void Update()
{
    if (!photonView.IsMine || !controllable)
    {
        return;
    }

    if (shootingTimer > 0.0)
    {
        shootingTimer -= Time.deltaTime;
    }

    m_MovementInputValue = Input.GetAxis(m_MovementAxisName); 
    if (m_MovementInputValue == 0.0f)
    {
        m_MovementInputValue = joystick.Vertical;
    }

    m_TurnInputValue = Input.GetAxis(m_TurnAxisName);
    if (m_TurnInputValue == 0.0f)
    {
        m_TurnInputValue = joystick.Horizontal;
    }

    Vector3 vector = new Vector3(
        m_TurnInputValue,
        rigidbody.velocity.y,
        m_MovementInputValue
    );

    MovementVector = Quaternion.AngleAxis(60, Vector3.up) * vector;

    EngineAudio();
}

public void FixedUpdate()
{
    if (!photonView.IsMine || !controllable)
    {
        return;
    }

    Move();
    Turn();
}

private void Move()
{
    // Adjust the position of the tank based on the player's input.
    // Vector3 movement = transform.forward * m_MovementInputValue * m_Speed * Time.deltaTime;
    // rigidbody.MovePosition(rigidbody.position + movement);

    Vector3 movement = MovementVector * m_Speed * Time.deltaTime;
    rigidbody.MovePosition(rigidbody.position + movement);
}

private void Turn()
{
    // Adjust the rotation of the tank based on the player's input.
    // float turn = m_TurnInputValue * m_TurnSpeed * Time.deltaTime;
    // Quaternion turnRotation = Quaternion.Euler(0f, turn, 0f);
    // rigidbody.MoveRotation(rigidbody.rotation * turnRotation);
    if (m_TurnInputValue != 0.0f || m_MovementInputValue != 0.0f)
    {
        rigidbody.rotation = Quaternion.LookRotation(MovementVector);
    }        
}

检查并确保组件(例如刚体)已连接到正确的对象(游戏对象-父对象与子对象)。 此外,它不断旋转的事实令人好奇...这让我认为它与Time.DeltaTime有关,但是我看到这仅应用于Vector3运动,而不应用于旋转功能...只是好奇,当从运动Vector3中删除Time.DeltaTime部分时会发生什么?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM