C# Unity 3d播放器在触摸墙壁后不断移动

C# Unity 3d播放器在触摸墙壁后不断移动,c#,unity3d,photon,C#,Unity3d,Photon,在我的玩家对象接触到墙壁后,它有时会自行开始移动和旋转。我试着增加玩家物品的重量,这很有帮助,但我认为这不是一个好方法,因为微小的动作永远不会消失 玩家是刚体,附带了框对撞机 isk-假; 使用重力-正确; XYZ旋转固定,Y坐标位置固定 墙有长方体碰撞器,但没有刚体。 地面没有碰撞器,因为Y位置是固定的,玩家对象不接触地面 游戏是基于网络的,所以我有光子刚体视图组件连接到玩家以及 移动玩家的代码(C#): public void Update() { if (!photonView.I

在我的玩家对象接触到墙壁后,它有时会自行开始移动和旋转。我试着增加玩家物品的重量,这很有帮助,但我认为这不是一个好方法,因为微小的动作永远不会消失

玩家是刚体,附带了框对撞机

isk-假; 使用重力-正确; 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);
    }        
}

检查以确保组件(如刚体)连接到正确的对象(游戏对象-父对象与子对象)。而且,它不断旋转的事实很奇怪。。。这让我觉得它和时间有关。DeltaTime,但我看到它只适用于向量3的运动,而不适用于旋转函数。。。好奇的是,当你从运动矢量3中删除Time.DeltaTime部分时会发生什么?

检查以确保组件(如刚体)连接到正确的对象(游戏对象-父对象与子对象)。而且,它不断旋转的事实很奇怪。。。这让我觉得它和时间有关。DeltaTime,但我看到它只适用于向量3的运动,而不适用于旋转函数。。。只是好奇,当你从运动矢量3中删除Time.DeltaTime部分时会发生什么?

嗨,抱歉可能不是经常发生,但在合理的时间内或在某个方向的下一次碰撞之前(有些碰撞会停止,有些则不会)。我将尝试删除deltaTime,稍后再通知您。Tx.嗨,抱歉可能不会持续,但在合理的时间内或在某个方向的下一次碰撞之前(有些碰撞会停止,有些则不会)。我将尝试删除deltaTime,稍后再通知您。德克萨斯州。