C# 我怎么才能得到一个统一的旋转坐标呢?
我想让立方体旋转不超过60度,这样它就不会旋转超过60度 我试着用这个C# 我怎么才能得到一个统一的旋转坐标呢?,c#,unity3d,C#,Unity3d,我想让立方体旋转不超过60度,这样它就不会旋转超过60度 我试着用这个 if(gameObject.GetComponent<Transform>().rotation.x >= 60 || gameObject.GetComponent<Transform>().rotation.x <= -60 || gameObject.GetComponent<Transform>().rotation.z >= 60 || gameObject.G
if(gameObject.GetComponent<Transform>().rotation.x >= 60 || gameObject.GetComponent<Transform>().rotation.x <= -60 || gameObject.GetComponent<Transform>().rotation.z >= 60 || gameObject.GetComponent<Transform>().rotation.z <= -60)
{
gameObject.GetComponent<Transform>().rotation = new Quaternion(0, 0, 0, 0);
}
if(gameObject.GetComponent().rotation.x>=60 | gameObject.GetComponent().rotation.x=60 | gameObject.GetComponent().rotation.z您感兴趣的是旋转的欧拉角,而不是旋转的四元数分量。您应该首先参考而不是transform.rotation.x
或transform.eulerAngles.z
而不是transform.rotation.z
顺便说一句,调用GetComponent
的次数最好尽量少,因为这是一个昂贵的操作。您应该调用一次,然后将结果分配给如下变量:
Transform cubeTransform = gameObject.GetComponent<Transform>();
if(cubeTransform.eulerAngles.x ...)
{
...
}
基本上,你想限制任意轴的旋转-x,y,或z
如果是,则解决方案如下:
节目:
仅在x和z方向旋转立方体不超过60度
var rotValue+=Time.deltaTime;
Cube.transform.rotaion=Quaternion.Eular(Mathf.Clamp(rotaValue,0,60),0,Mathf.Clamp(rotaValue,0,60))
可以使用Mathf.clamp来夹紧最小值和最大值之间的任何浮点值。
希望,问题解决。我认为你的方法很好,但不适合这种情况。为了控制转换,应该处理欧拉角
简单理解如下:
// declare your cube rotation
float moveSpeed = 5f // speed in which cube rotates
float rotatecube = moveSpeed* Time.deltaTime* 10;
//Your condition be like
if(transform.eulerAngles.z < (.....declare the requirement.....))
transform.Rotate(vector3.forward * rotateCube);
//声明立方体旋转
float moveSpeed=5f//立方体旋转的速度
float rotatecube=moveSpeed*Time.deltaTime*10;
//你的情况可能是这样的
如果(transform.eulerAngles.z<(…声明要求…)
transform.Rotate(vector3.forward*rotateCube);
如果您仍然面临与角度有关的任何问题console.log()
是更好的自我理解方式。
希望它能澄清….谢谢我不知道我需要这么说
// declare your cube rotation
float moveSpeed = 5f // speed in which cube rotates
float rotatecube = moveSpeed* Time.deltaTime* 10;
//Your condition be like
if(transform.eulerAngles.z < (.....declare the requirement.....))
transform.Rotate(vector3.forward * rotateCube);