簡體   English   中英

用單個操縱桿旋轉3D對象

[英]Rotating 3D object with a single joystick

我正在Unity 3d中創建一個使用單個操縱桿的游戲。 我試圖弄清楚如何正確使用操縱桿旋轉3d對象。 基本上,當操縱桿被向上(或向前)推時,對象將向前旋轉,反之亦然。 我的問題是,如果將對角線向左或向右推,則使對象正確旋轉。

我的操縱桿使用的值為(0,1)表示向上,(0,-1)表示向下,(1,0)表示右側,(-1,0)表示左側。

如何使對象在操縱桿上向前或向后以及向對角線方向旋轉? (很抱歉,這令人困惑。我正在嘗試盡可能簡單地問這個問題)。

現在,這就是我要旋轉的內容:

if ((x > 0 && x < .2f) || (x < 0 && x > .2f)) x = 0;
if ((y > 0 && y < .2f) || (y < 0 && y > .2f)) y = 0;

if (x < 0) car.transform.Rotate(car.transform.forward.x * 10f, car.transform.forward.y * 10f, -car.transform.forward.y * 10f);
else if (x > 0) car.transform.Rotate(car.transform.forward.x * 10f, car.transform.forward.y * 10f, car.transform.forward.y * 10f);
else car.transform.Rotate(car.transform.forward.x * 10f, car.transform.forward.y * 10f, 0f);

看來您不了解Transform.Rotate (第二次重載)。

這是方法的簽名:

public void Rotate(float xAngle, float yAngle, float zAngle, Space relativeTo = Space.Self);

xAngle是圍繞x軸旋轉的度數。 傳遞正向矢量的一個分量( car.transform.forward.x )試圖將單位矢量分量放入接受角度的參數中。 概念和單位根本不匹配,因此結果無法描述。

相反,您應該根據操縱桿位置使用角度旋轉。 相對模式(默認為Space.Self )表示操縱桿相對於對象的當前旋轉起作用。

應該這樣做,其中xy是您的操縱桿位置:

car.transform.Rotate(y, x, 0)

您可以仔細查看哪些操縱桿軸與哪些Unity軸匹配,或者嘗試四處移動xy直到正確工作。 您可能還需要根據自己的喜好取反xy

暫無
暫無

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

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