首页 > 解决方案 > 如何限制对象的 Z 旋转

问题描述

我正在开发 2D 游戏,我有一个可以跳的对象。在刚体 2D 中,我冻结了 x 和 y,但没有冻结 z,并且我将脚本中的 z 限制为:

private void FixedUpdate() { 
 Vector3 euler = transform.eulerAngles; 
 if (euler.z > 180) euler.z = euler.z - 360; 
 { 
   euler.z = Mathf.Clamp(euler.z, -35, 35); 
   transform.eulerAngles = euler; 
  } 
}

当玩家跳上它时它可以限制 z 但 y 和 x 正在改变。它飞出屏幕你知道为什么它会在 x 和 y 上移动,而它们被选中冻结在检查器上。如果我解冻 y,它适用于 z 旋转但 y 掉下来。有什么想法吗?

标签: c#unity3d

解决方案


我之前是个盲人。
问题似乎出在您的代码结构中。看if声明。

 if (euler.z > 180) euler.z = euler.z - 360; 
 { 
   euler.z = Mathf.Clamp(euler.z, -35, 35); 
   transform.eulerAngles = euler; 
 } 

这不是你想的那样。让我们用不同格式但完全相同的代码重写:

 if (euler.z > 180)
   euler.z = euler.z - 360; 

 { 
   euler.z = Mathf.Clamp(euler.z, -35, 35); 
   transform.eulerAngles = euler; 
 } 

这里实际发生的情况是,由于 if 语句后面的行不在大括号内,因此代码被解释为:

 if (euler.z > 180) {
   euler.z = euler.z - 360;
 }
 euler.z = Mathf.Clamp(euler.z, -35, 35); 
 transform.eulerAngles = euler;  

从技术上讲,最后两行在不同的范围内,但这在这里并不重要。
尝试使用预期的结构重新格式化您的代码,并希望这样做。


推荐阅读