飞机-防止旋转超出限制,但允许转弯



我有一个使用Input.GetAxis输入旋转的飞机对象。它被限制在z轴和y轴上的100度运动范围内:

if (transform.eulerAngles.z < 50 || transform.eulerAngles.z > 310) {
transform.Rotate(0f, Input.GetAxis("Horizontal"), -Input.GetAxis("Horizontal"));
}
if (transform.eulerAngles.y < 50 || transform.eulerAngles.y > 310) {
transform.Rotate(Input.GetAxis("Vertical"), 0f, 0f);
}

按下按钮,飞机向前推进,forward是飞机面对的方向:

transform.position += transform.forward * Time.deltaTime * speed;

这不符合我的意愿。当平面达到旋转极限时(例如transform.eulerAngles.z==50(,平面不再以"圆弧"移动,如中所示,forward不是直线。当它达到极限时,平面只是在一条直线上移动。我希望它继续弧形,只是不要超过旋转限制。我希望这有道理?有人对我如何做到这一点有什么建议吗?

您的问题是将旋转角度与欧拉角度进行比较。所以,当你达到50度时,就不可能再旋转了。

您必须将旋转与正向矢量进行比较,并将此旋转限制为50度

我简直不敢相信这个解决方案有多明显。。。当然,我不希望y轴停止旋转。这是我的解决方案:

float getHorizontal;
float getVertical;
if (transform.eulerAngles.z < 50 || transform.eulerAngles.z > 310) {
getHorizontal = Input.GetAxis("Horizontal");
} else {
getHorizontal = 0f;
}
if (transform.eulerAngles.x < 50 || transform.eulerAngles.x > 310) {
getVertical = Input.GetAxis("Vertical");
} else {
getVertical = 0f;
}
transform.Rotate(getVertical, Input.GetAxis("Horizontal"), -getHorizontal);

最新更新