簡體   English   中英

飛機 - 防止旋轉超出限制,但允許轉彎

[英]Aeroplane - prevent rotation outside limits, but allow turning

我有一架使用 Input.GetAxis 輸入旋轉的飛機 object。 它被限制在 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM