我试图做一个前后旋转的旋转大炮。 我想将旋转从-55限制为55(我的意思是transform.position.z),但我无法使它工作。
目前我的代码是:
public class Cannon : MonoBehaviour
{
bool hit = false;
void Update ()
{
float angle = transform.rotation.z;
if (angle > -55 & angle < 55 & !hit)
{
transform.Rotate(Vector3.back * Time.deltaTime);
}
if (angle <= -55)
{
transform.Rotate(Vector3.back * Time.deltaTime);
hit = true;
}
if (angle >= 55)
{
transform.Rotate(Vector3.forward * Time.deltaTime);
hit = true;
}
}
}
唯一有效的想法就是我为对象开始旋转所做的第一次旋转,所以它只是旋转回来而不停止,它似乎忽略了角度&#34;角度& #34;
我还尝试将最后两个If语句放在第一个语句中,但仍然无效。
我想让它旋转直到达到-55,然后开始旋转直到达到+55并重复此操作。
答案 0 :(得分:1)
您需要做的第一件事是使用Euler Angles而不是Quarternions来查找度数的旋转。
然后,由于它不报告负角度,而是报告从0到360的角度,每当大于180时,您需要减去360以获得相等的负角度。
从那里你可以应用你的测试来保持它的界限:
public class Cannon : MonoBehaviour {
public float direction = 1f; // initial direction
public float speed = 20f; // speed of rotation
void Update ()
{
float angle = transform.eulerAngles.z;
if (angle > 180f) angle -= 360f;
if ((angle < -55f) || (angle > 55f)) direction *= -1f; // reverse direction (toggles between 1 & -1)
transform.Rotate (0, 0, speed * direction * Time.deltaTime);
}
}