2017-09-07 54 views
3

我是新來的Unity和剛體,我想我會通過嘗試製作3D Tron Light-cycle遊戲來學習。我做了使用圓柱體,球體和矩形的組合,我的球員的車輛,如下所示:統一 - 爲摩托車使用剛體 - 我該如何轉彎?

enter image description here

我用細長的球剛體,並用下面的代碼:

public float accel = 1.0f;  
// Use this for initialization 
void Start() { 
    cycleSphere = GetComponent<Rigidbody>(); 
} 

void FixedUpdate() { 
    cycleSphere.velocity = Vector3.forward * accel; 
} 

使車輛向前移動。我不確定是否有更好的方法來做到這一點,但如果有,請說明一下。

我已將主攝像頭連接到車輛,並禁用X旋轉以防止它和攝像頭滾動。

現在我想通過按A和D按鈕來使其旋轉。與原來特隆燈光循環的90度轉向不同,我希望它像普通車輛一樣轉向。

所以,我想這一點:

void Update() { 
    if (Input.GetKey (KeyCode.A)) { 
     turning = true; 
     turnAnglePerFixedUpdate -= turnRateAngle; 
    } else if (Input.GetKey (KeyCode.D)) { 
     turning = true; 
     turnAnglePerFixedUpdate += turnRateAngle; 
    } else { 
     turning = false; 
    } 
} 

void FixedUpdate() { 
    float mag = cycleSphere.velocity.magnitude; 
    if (!turning) { 
     Quaternion quat = Quaternion.AngleAxis (turnAnglePerFixedUpdate, transform.up);// * transform.rotation; 
     cycleSphere.MoveRotation (quat); 
    } 
    cycleSphere.velocity = Vector3.forward * accel; 
} 

雖然上面的代碼做旋轉車輛,它仍然在移動的最後一個方向是在 - 它的行爲更像是一個坦克炮塔。更糟糕的是,按A或D太多會導致它在所需的方向旋轉,並在一段時間後,堅果,旋轉這種方式,並帶着相機。

enter image description here

我做了什麼錯,我該如何解決?

回答

3

首先,我會建議你從Input.GetKey改爲Input.GetAxis,它會優雅地增加或減少按下按鍵時的值。這將使您可以選擇將作爲速度應用的力矢量標準化。然後根據該矢量,您必須調整您的力量輸入,以便「前輪」將身體的其餘部分「拖」到其他方向(左側或右側)。這不是理想的「真實世界物理行爲」,因爲向前的力比側面(左或右)力略大。

代碼示例:

// member fields 
float sideForceMultiplier = 1.0f; 
float frontForceMultiplier = 2.0f; 
Vector3 currentVeloticy = Vector3.zero; 

void Update() 
{ 
    Vector3 sideForce = (sideForceMultiplier * Input.GetAxis("horizontal")) * Vector3.right; 
    Vector3 frontForce = frontForceMultiplier * Vector3.forward; 
    currentVelocity = (sideForce + fronForce).Normalize; 
} 

void FxedUpdate() 
{ 
    cycleSphere.velocity = currentVelocity * accel; 
} 
+0

嗯,有趣。自那時起,我對代碼做了一些修改,並且確實讓它工作,但我已經接受了您的建議並將getKey替換爲Input。這段代碼如何轉變? –

+0

該代碼與從Input.GetAxis(「horizo​​ntal」)檢索到的值相關,後者與「2 * forwardForce」結合使用。意思是它將繼續向前移動,但每當有一個水平輸入時,它就會修改力(使它有點彎曲)。 –