2015-12-02 95 views
3

我仍在學習基礎知識,所以請稍微溫柔。我正在研究滾動遊戲的動作腳本。我的滾動效果非常好,但現在我試圖增加跳躍的能力。讓玩家在Unity3D中正確跳轉

在我的情況下,「玩家」是一個基本的球體。我試圖完成的是當空間被按下時,球沿着它當前滾動的方向跳入空中。

這是我嘗試過自己,但給出了非常奇怪的結果:

float moveHorizontal = Input.GetAxis("Horizontal"); 
float moveVertical = Input.GetAxis("Vertical"); 

Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical); 

if (Input.GetKey("space")) 
{ 
    transform.position += transform.up * 20 * Time.deltaTime; 
} 

rb.AddForce(movement * speed); //rb = RigidBody 

這導致球有時會在錯誤的方向跳躍或只是簡單地加速到某個方向不跳的。所以顯然我越來越近了,但還沒有完成。任何人都可以解釋我做錯了什麼,以及如何解決它?

不尋找快速修復!不要從中學到任何東西。

回答

2

有在這個試試:)

if (Input.GetKey("space")) 
{ 
    rigidbody.AddForce(new Vector3(0, yourJumpForce, 0), ForceMode.Impulse); 
} 

你也可能會希望在剛體重力設置搗鼓得到您想要的跳躍,以及!

編輯說明

我想這可能是因爲你申請你運動到你的Rigidbody,但你的跳躍方法將Transform本身。

A Rigidbody是一個物理組件(請參見docs.unity3d.com/ScriptReference/Rigidbody.html),其中Transform用於處理位置,旋轉和縮放。

跳可能被認爲是一個物理問題 - 因此改變跳是與物理(Rigidbody),而不是位置(Transform)。我傾向於使用Transform執行所有移動代碼,因爲您正在移動位置,並且使用Rigidbody完成所有基於物理的工作,因爲您正在將物理應用到GameObject! :)

+0

這似乎工作得很好。謝謝。但是,你能解釋爲什麼我的解決方案不起作用嗎?我試圖理解我在做什麼,而不是盲目地複製/粘貼。 – icecub

+0

太棒了。我想我可以用這個工作。再次感謝! :)順便說一句:我確實設法通過互聯網使它成爲多人遊戲。 Ppl可以加入他們自己的球並開始滾動xDD – icecub

+0

好東西,我已經拿出了評論,並將它們包含在我的回答中:) – Tom

0

要添加到接受的答案:跳轉到隨機指示問題可能是由transform.up造成的。該向量相對於當前變換向上方向。除了旋轉游戲對象之外,通常與實際的向上方向相同。而在這種情況下,對象碰巧是一個滾動球,它很可能是旋轉的。

您可以使用全局向上方向來修復它 - 或者像接受的答案那樣做,或者使用Vector3.up