为什么我的播放器统一旋转
why my player rotates in unity
我给播放器附加了一个移动脚本。参考滚球教程修改为跳跃。问题是,当玩家可以向任何方向移动时,玩家开始朝那个方向旋转,即使我站在一个位置不动,它也会开始旋转并从平台上掉下来。播放器有一个刚体,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);
}
这是由于刚体组件的性质造成的。这个部件非常逼真,加力和卸力时,物体仍然有惯性,所以物体还在运动。
说到旋转,是因为当一个力作用于物体时,物体也会产生旋转运动(也称为angular运动)。
您可以使用 Rigidbody 组件上的约束来冻结旋转。
在 [此处] 更深入地了解此组件。1
在我看来,它是Unity的核心组件之一,绝对值得研究。
希望我回答了你的问题!
在你的代码中,你使用了 AddForce 函数,所以我确认你的播放器刚体没有将 Kinematic 设置为 true。
当您的角色与任何其他物体(例如地面、墙壁)发生碰撞时,您的角色可能会旋转。
你可以像 Bijan 说的那样通过 inspector 冻结刚体的旋转。
我不建议您使用 AddForce 和 MovePosition together.It 可能还有其他问题。
like this
我给播放器附加了一个移动脚本。参考滚球教程修改为跳跃。问题是,当玩家可以向任何方向移动时,玩家开始朝那个方向旋转,即使我站在一个位置不动,它也会开始旋转并从平台上掉下来。播放器有一个刚体,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);
}
这是由于刚体组件的性质造成的。这个部件非常逼真,加力和卸力时,物体仍然有惯性,所以物体还在运动。
说到旋转,是因为当一个力作用于物体时,物体也会产生旋转运动(也称为angular运动)。
您可以使用 Rigidbody 组件上的约束来冻结旋转。 在 [此处] 更深入地了解此组件。1
在我看来,它是Unity的核心组件之一,绝对值得研究。
希望我回答了你的问题!
在你的代码中,你使用了 AddForce 函数,所以我确认你的播放器刚体没有将 Kinematic 设置为 true。
当您的角色与任何其他物体(例如地面、墙壁)发生碰撞时,您的角色可能会旋转。
你可以像 Bijan 说的那样通过 inspector 冻结刚体的旋转。
我不建议您使用 AddForce 和 MovePosition together.It 可能还有其他问题。 like this