为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我的球员统一轮换

为什么我的球员统一轮换

C#
一只名叫tom的猫 2021-11-07 19:09:45
我将移动脚本附加到玩家。参考滚球教程,修改为跳跃。问题是当玩家向任何方向移动时,玩家开始向那个方向旋转,即使我站在一个位置不动,它也开始旋转并从平台上掉下来。播放器有一个刚体,boxcollider 组件。void Awake (){    playerRigidbody = GetComponent<Rigidbody>();    Coll = GetComponent<CapsuleCollider>();}/*private void Update(){}*/// Update is called once per framevoid 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 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

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

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

你可以像 Bijan 说的那样通过检查员冻结刚体的旋转。

我不建议你同时使用 AddForce 和 MovePosition。它可能有其他问题。


查看完整回答
反对 回复 2021-11-07
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

这是由于刚体组件的性质。这个组件非常逼真,当加力和撤除力时,物体仍然具有惯性,因此物体仍在运动。

说到旋转,是因为当对物体施加力时,物体也会获得旋转运动(也称为角运动)。

您可以使用 Rigidbody 组件上的约束来冻结旋转。更深入地了解这个组件 [here]。1

在我看来,它是 Unity 的核心组件之一,绝对值得研究。

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


查看完整回答
反对 回复 2021-11-07
  • 2 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信