为什么我的播放器会统一旋转

时间:2018-07-30 19:58:36

标签: c# unity3d rotation physics

我将移动脚本附加到播放器上。参考滚球教程,并对其进行了修改以进行跳跃。问题是,当玩家可能在任何方向上移动时,玩家都会开始朝该方向旋转,即使我仍然站在一个位置上,它也会开始旋转并跌落到平台上。播放器具有刚体,boxcollider组件。

void Awake ()
{
    playerRigidbody = GetComponent<Rigidbody>();
    Coll = GetComponent<CapsuleCollider>();
}

/*private void Update()
{

}*/
// Update is called once per frame
void FixedUpdate ()
{
    float h = Input.GetAxisRaw("Horizontal");
    float v = Input.GetAxisRaw("Vertical");
    bool down = Input.GetKeyDown(KeyCode.Space);

    if (down)
    {
        playerRigidbody.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
    }

    Move(h, v);
}

private bool IsGrounded()
{

    return Physics.CheckCapsule(Coll.bounds.center, new Vector3(Coll.bounds.center.x,Coll.bounds.min.y,Coll.bounds.center.z),Coll.height * 9f,Ground);
}

void Move (float h, float v)
{
    movement.Set(h, 0f, v);
    movement = movement.normalized * speed * Time.deltaTime;

    playerRigidbody.MovePosition(transform.position + movement);
}

2 个答案:

答案 0 :(得分:0)

这是由于刚体组件的性质所致。该组件非常逼真,在添加和移除力时,对象仍然具有惯性,因此对象仍在移动。

旋转时,是由于在对对象施加力时对象也获得了旋转运动(也称为角运动)。

您可以使用“刚体”组件上的约束冻结旋转。 在此[这里]有更深入的了解。1

我认为,它是Unity的核心组件之一,绝对值得研究。

我希望我回答了你的问题!

答案 1 :(得分:0)

在您的代码中,您使用了AddForce函数,因此我确认您的播放器刚体没有将Kinematic设置为true。

当角色与其他任何物体(例如地面,墙壁)碰撞时,角色可能会旋转。

您可以像Bijan所说的那样通过检查器冻结刚体的旋转。

我不建议您同时使用AddForce和MovePosition,这可能还有其他问题。 like this