【问题标题】:Unity object rotates despite Freeze尽管冻结,Unity 对象仍会旋转
【发布时间】:2021-02-04 00:47:59
【问题描述】:

我在 Unity 中制作游戏,但是对象旋转出现问题:我的坐标冻结了,但我移动对象后它仍然旋转:

https://youtu.be/tVwGnWVi_Eo

在视频中,我移动了对象,当我释放所有键时,尽管有“冻结”选项,它仍会旋转。

这是我的运动脚本:

public class Movement : MonoBehaviour
{
     public int speed;
     public int turningForce;
     private int jumpForce;
     public int jumpForceMax;

     public Rigidbody rb;

     bool doJump;

     void Start()
     {

     }

     private void Update()
     {
         if (Input.GetKeyUp("space"))
         {
             doJump = true;
         }
     }

     void FixedUpdate()
     {
         if (Input.GetKey("space") && IsOnGround)
         {
             if (jumpForce < jumpForceMax)
             {
                 jumpForce += 50;
             }
         }

         if (Input.GetKey("w") && IsOnGround)
         {
             rb.AddRelativeForce(speed * Time.deltaTime, 0, 0);
         }

         if (Input.GetKey("a"))
         {
             rb.AddTorque(new Vector3(0, -speed * Time.deltaTime, 0));
         }

         if (Input.GetKey("d"))
         {
             rb.AddTorque(new Vector3(0, speed * Time.deltaTime, 0));
         }

         if (doJump)
         {
             rb.AddForce(0, jumpForce, 0);
             doJump = false;
             jumpForce = 0;
         }
     }

     private bool m_IsOnGround;

     public bool IsOnGround
     {
         get
         {
             if (m_IsOnGround)
             {
                 m_IsOnGround = false;
                 return true;
             }
             else
             {
                 return false;
             }
         }
     }

     void OnCollisionStay()
     {
         m_IsOnGround = true;
     }
 }

如您所见,没有 transform.position 更改,并且启用了 Freeze Y 选项。

希望有人可以帮助我了解发生了什么。

【问题讨论】:

    标签: c# unity3d rotation game-physics


    【解决方案1】:

    我不确定你在哪里冻结了 Y 旋转,但是

    rb.AddTorque(new Vector3(0, -speed * Time.deltaTime, 0));

    是一个使用力旋转刚体的函数 如果您冻结了旋转,这有什么意义?

    如果你像这样冻结了组件的旋转,函数 AddTorque() 将不起作用。

    【讨论】:

    • 这其实很奇怪,你是对的,尽管旋转被冻结,但 AddTorque() 函数仍然有效……请查看视频,您应该可以看到冻结选项已启用。
    • 我认为还值得一提的是,我可以看到“冻结”选项确实有效(不包括移动后的这种随机旋转)。如果我禁用冻结,对象将立即沿斜坡向下旋转。
    • 如果您不希望它旋转,只需在您的代码中禁用该功能。将其作为评论,当您按住/按下“A”或“D”时它将停止旋转。您的代码只是按要求执行。
    • 请观看此视频:youtu.be/iugRjSWY0qg 我已禁用我的运动脚本,但正如您所见,尽管对象已冻结,但它仍会旋转。我的问题是:它为什么会旋转?
    • 只冻结一个轴不会阻止刚体旋转。
    猜你喜欢
    • 1970-01-01
    • 2021-06-08
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 2015-06-18
    • 1970-01-01
    相关资源
    最近更新 更多