Unity3d 当对象';s z旋转超出限制

Unity3d 当对象';s z旋转超出限制,unity3d,rotation,Unity3d,Rotation,所以,我想做一个大炮跟着老鼠的游戏。然而,我不想让它一直跟着它到地下,所以我希望它在到达那里之前停下来。我试着用钳夹的方法,但不起作用。我尝试了另一种方法。这是我的密码:` using UnityEngine; public class CannonPoint : MonoBehaviour { public GameObject cannon; public float rotateSpeed = 5; public float minAngle = -60; pu

所以,我想做一个大炮跟着老鼠的游戏。然而,我不想让它一直跟着它到地下,所以我希望它在到达那里之前停下来。我试着用钳夹的方法,但不起作用。我尝试了另一种方法。这是我的密码:`

using UnityEngine;

public class CannonPoint : MonoBehaviour {
   public GameObject cannon;
   public float rotateSpeed = 5;

   public float minAngle = -60;
   public float maxAngle = 60;

  void FixedUpdate(){
    Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    transform.rotation = Quaternion.LookRotation(Vector3.forward, mousePos - transform.position);
  }
  void Update(){
    if (transform.rotation.z > 71.759f) {
        Debug.Log ("not working");
        transform.rotation = Quaternion.Euler (transform.rotation.x, transform.rotation.y, 71.759f);
    }
    if (transform.rotation.z < -71.759f) {
        Debug.Log ("not working");
        transform.rotation = Quaternion.Euler (transform.rotation.x, transform.rotation.y, -71.759f);
    }
  }
}`
使用UnityEngine;
公共类加农炮点:MonoBehavior{
公共游戏机加农炮;
公共浮动轮换速度=5;
公共浮点数minAngle=-60;
公共浮点数maxAngle=60;
void FixedUpdate(){
Vector3 mousePos=Camera.main.ScreenToWorldPoint(Input.mousePosition);
transform.rotation=Quaternion.LookRotation(Vector3.forward,mousePos-transform.position);
}
无效更新(){
if(变换旋转z>71.759f){
Debug.Log(“不工作”);
transform.rotation=Quaternion.Euler(transform.rotation.x,transform.rotation.y,71.759f);
}
if(变换旋转z<-71.759f){
Debug.Log(“不工作”);
transform.rotation=Quaternion.Euler(transform.rotation.x,transform.rotation.y,-71.759f);
}
}
}`
当我这样做时,函数不会启动。在更新中,检查器告诉我,旋转实际上大于71.759,但是Debug.Log不会触发为什么会发生这种情况!我感到很困惑。谢谢


(让你知道我的主要目标是防止大炮指向地下。)

当你在统一体中使用旋转时,在你完全理解它之前,一开始新手会有点困惑

查看当您从变换中获取值时。旋转将返回四元数的对象。单位四元数的轴值从零(0)变为一(1)。 在您的情况下,您的条件不可能为真或z值不可能达到71.759

相反,我建议您使用
transform.eulerAngles.z
检查对象的旋转

更新:对于鼠标指针位置之后的位置,我为您准备了一些代码

Vector3 v = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    v = v - t.position;
    a = Mathf.Atan2(v.y, v.x) * Mathf.Rad2Deg - 90f;
    Vector3 angles = t.eulerAngles;
    angles.z = Mathf.Clamp(a, -70f, 70f);
    t.eulerAngles = angles;
这就是你需要测试的全部。
更多关于瞄准鼠标指针位置的信息请查看此视频

你找到你要找的东西了吗?@Ankit没有,我在你的答案下面添加了我的新代码。
if(transform.rotation.eulerAngles.z>71.759f){transform.rotation=Quaternion.Euler(transform.rotation.x,transform.rotation.y,71.759f);}if(transform.rotation.eulerAngles.z<-71.759f){transform.rotation=Quaternion.Euler(transform.rotation.x,transform.rotation.y,-71.759f);}
我想你应该用transform.eulerAngle.x和transformeulerAngle.y来代替。我应该把它们放在哪里?这是我的新代码,仍然不起作用(transform.rotation.eulerAngles.x,transform.rotation.eulerAngles.y,71.759f);