Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity对象在冻结状态下旋转_C#_Unity3d_Rotation_Game Physics - Fatal编程技术网

C# Unity对象在冻结状态下旋转

C# Unity对象在冻结状态下旋转,c#,unity3d,rotation,game-physics,C#,Unity3d,Rotation,Game Physics,我正在Unity中制作一个游戏,但对象旋转有一个问题:我冻结了一个坐标,但在我移动对象后它仍然旋转: 在视频中,我移动对象,当我释放所有关键点时,它会旋转,尽管使用了冻结选项 这是我的动作脚本: public class Movement : MonoBehaviour { public int speed; public int turningForce; private int jumpForce; public int jumpForceMax;

我正在Unity中制作一个游戏,但对象旋转有一个问题:我冻结了一个坐标,但在我移动对象后它仍然旋转:

在视频中,我移动对象,当我释放所有关键点时,它会旋转,尽管使用了冻结选项

这是我的动作脚本:

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;
     }
 }
公共阶级运动:单一行为
{
公共交通速度;
公共交通力量;
私人部队;
公共int jumpForceMax;
公共刚体;
bool-doJump;
void Start()
{
}
私有void更新()
{
if(Input.GetKeyUp(“空格”))
{
doJump=true;
}
}
void FixedUpdate()
{
if(Input.GetKey(“空格”)和&IsOnGround)
{
if(跳线力<跳线力最大值)
{
跳跃力+=50;
}
}
if(Input.GetKey(“w”)和&IsOnGround)
{
rb.AddRelativeForce(速度*Time.deltaTime,0,0);
}
if(Input.GetKey(“a”))
{
rb.AddTorque(新矢量3(0,-速度*时间增量,0));
}
if(Input.GetKey(“d”))
{
rb.AddTorque(新矢量3(0,速度*时间增量,0));
}
if(doJump)
{
rb.附加力(0,跳跃力,0);
doJump=false;
跳跃力=0;
}
}
私人住宅;
公共场所
{
得到
{
如果(m_IsOnGround)
{
m_IsOnGround=假;
返回true;
}
其他的
{
返回false;
}
}
}
void OnCollisionStay()
{
m_IsOnGround=真;
}
}
如您所见,没有任何transform.position更改,并且启用了“冻结Y”选项


希望有人能帮助我理解发生了什么。

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

rb.AddTorque(新矢量3(0,-速度*Time.deltaTime,0))

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

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

这实际上很奇怪,您是对的,尽管旋转被冻结,函数AddTorque()仍能起作用。。。请检查视频,您应该能够看到冻结选项启用。我认为还值得一提的是,我可以看到冻结选项实际工作(不包括移动后的随机旋转)。如果我禁用冻结,对象将立即沿斜坡向下旋转。如果不希望它旋转,请在代码中禁用该功能。当你按住/按“a”或“D”时,它将停止旋转。您的代码只是按照要求执行。请检查此视频:我已禁用我的移动脚本,但正如您所看到的,尽管对象已冻结,但对象仍在旋转。我的问题是:为什么它会旋转?仅仅冻结一个轴并不能阻止刚体旋转。