【问题标题】:Unity Mathf.clamp not working as expected?Unity Mathf.clamp 没有按预期工作?
【发布时间】:2017-04-29 19:43:53
【问题描述】:

我正在开发第一人称射击游戏,我想限制相机旋转。我使用 Math.clamp 来夹紧角度,但在角度达到 0 后,它会夹紧到最大角度。它应该直到-24f才夹紧。我该如何解决这个问题。

 public void CameraRotate(Vector3 camrotate){

cam.transform.Rotate (camrotate*Time.deltatime);
        temporaryangle = cam.transform.eulerAngles;
        temporaryangle= new Vector3 (Mathf.Clamp(cam.transform.eulerAngles.x,-24f,55f),cam.transform.eulerAngles.y,cam.transform.eulerAngles.z); // camrotate means a vector and cam is the camera
        cam.transform.eulerAngles= temporaryangle;

}

【问题讨论】:

  • 您确定必须使用camrotate.x 而不是camrotate.y
  • @Hristo y 用于左/右旋转。所以我不想限制它
  • 哦,我明白了,您使用的是cam.transform.position,但您可能想要cam.transform.rotation
  • @Hrist 对不起,我复制了错误的代码。这是最后一个
  • @Hrist 看看你能不能帮忙。对不起我以前的代码

标签: c# unity3d


【解决方案1】:

您可以通过在比较之前添加一个偏移量(比如 180f)并在之后将其删除,将比较转移到不涉及 0 / 360 处环绕的范围:

var tmpOffset = 180f;

var clampedX = cam.transform.eulerAngles.x + tmpOffset;
clampedX = Mathf.Clamp(clampedX, tmpOffset - 24f, tmpOffset + 55f);
clampedX -= tmpOffset; // return to the correct value

temporaryangle = new Vector3 (clampedX, cam.transform.eulerAngles.y, cam.transform.eulerAngles.z); // camrotate means a vector and cam is the camera

【讨论】:

  • 仅供参考,当旋转低于 0 时它跳到 55f 的原因是 Unity 将映射负值 -1 到 359 度等,这当然大于您的最大值 55f,所以会钳制到此为止。
猜你喜欢
  • 2021-10-19
  • 2020-03-18
  • 2012-06-14
  • 2014-11-15
  • 1970-01-01
  • 2012-07-02
  • 2011-09-07
  • 2013-03-03
  • 2015-05-18
相关资源
最近更新 更多