Mathf.Clamp将达到最大值时将我的eulerangle重置为minValue,而不是将其限制为maxValue。我已经尝试过了:
rotateX = Input.GetAxis("Mouse X") * senseX;
player.transform.Rotate(player.up, Mathf.Deg2Rad * rotateX, Space.World);
playerXRotation = player.eulerAngles;
while (playerXRotation.y > 180f)
playerXRotation.y -= 360f;
Debug.Log("Y Rotation: " + playerXRotation.y);
playerXRotation.y = Mathf.Clamp(playerXRotation.y, lowLimitY, highLimitY);
player.transform.eulerAngles = playerXRotation;
还有:
rotate = Input.GetAxis("Mouse X") * senseX;
rotation = player.transform.eulerAngles;
rotation.y += rotate * RateOfRotate;
while (rotation.y > 180)
{
rotation.y -= 360;
}
rotation.y = Mathf.Clamp(rotation.y, lowLimitY, highLimitY);
player.transform.eulerAngles = rotation;
在这两种情况下,我的lowLimitY = 0和highLimitY = 180;我对此一无所知,不知道如何解决。任何帮助将不胜感激。
答案 0 :(得分:2)
并且它们被转换为范围为[0-360]的欧拉角,因此while (rotation.y > 180)
将永远无法工作。
您需要单独跟踪旋转值,将其钳位到所需值,然后 将其应用于对象的旋转。
rotation = player.transform.eulerAngles;
float rotationY = rotation.y + rotate * RateOfRotate;
rotationY = Mathf.Clamp(rotationY, lowLimitY, highLimitY);
rotation.y = rotationY;
player.transform.eulerAngles = rotation;
答案 1 :(得分:0)
如果您的
lowLimit = 0
和highLimit = 180
,然后运行:
while (rotation.y > 180)
{
rotation.y -= 360;
}
如果旋转的值为maxValue(180),则rotation.y等于-180(180-360 = -180)。
那你的钳位是Mathf.Clamp(-180, 0, 180) // 0
如果您尝试将y旋转保持在该范围内,则删除while应该可以解决问题。如果您想获得不同的效果,我们将需要更多信息。