2016-01-15 77 views
0

我正在Unity 3D中使用單個操縱桿創建遊戲。我想弄清楚如何正確使用操縱桿來旋轉3D對象。基本上,當操縱桿向上(或向前)推動時,物體將向前旋轉,反之亦然,因爲它被推下。我的問題是讓對象正確旋轉,如果我要將對角向左或向右推。我的操縱桿使用向上賦值(0,1),向下賦值(0,-1),向右賦值(1,0),向左賦值爲(-1,0)。使用單個操縱桿旋轉3D對象

如何讓物體在操縱桿上向前或向後轉動並朝向對角線方向? (如果這是令人困惑的,我很抱歉,我想盡可能簡單地問這個問題)。

現在這是我使用旋轉什麼:

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); 
+0

「我的問題是讓對象正確旋轉,如果我將對角向左或向右推。」這表明你有一些不起作用的代碼。你能證明嗎? – 31eee384

+0

@ 31eee384現在我測試了它,它不適用。這取決於我在世界空間的位置。有些地方可以旋轉,其他地方可以不用,所以我可能會說我沒有旋轉功能。對於那個很抱歉。 – saboehnke

+0

@ 31eee384檢查編輯。謝謝 – saboehnke

回答

2

它看起來像你不明白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) 

您可以仔細看一下其中操縱桿軸與團結軸匹配,或者嘗試移動xy各地直到它正常工作。根據您的偏好,您可能還需要取消xy

+0

我甚至沒有注意到使用car.transform.position的事實並未使用操縱桿的x值和y值。哎呀。我嘗試了很多不同的東西,我猜想我只是迷失了方向。現在我只需要弄清楚爲什麼我不能左右旋轉,因爲它只是向前和向後旋轉。 – saboehnke