Unity - 剛體和物理



上一章中碰撞的主要問題在於程式碼。我們現在將直接修改遊戲物件的座標值。如果玩家按下按鍵,我們只是向座標新增一個值。我們需要一種方法讓玩家移動,使其能夠正確地對邊界和其他遊戲物件做出反應。

為此,我們需要了解什麼是剛體。剛體是允許遊戲物件對即時物理做出反應的元件。這包括對力、重力、質量、阻力和動量的反應。

您可以透過單擊新增元件並在搜尋欄位中鍵入Rigidbody2D來將剛體附加到您的遊戲物件。

Rigidbody2D

單擊Rigidbody2D會將元件附加到您的遊戲物件。附加後,您會注意到許多新欄位已開啟。

Dynamic Body Type

使用預設設定,由於重力,遊戲物件將垂直向下墜落。為避免這種情況,請將重力縮放設定為0。

現在,遊戲執行時不會顯示任何明顯的差異,因為遊戲物件尚未與其物理元件有任何關聯。

為了解決我們的問題,讓我們再次開啟我們的程式碼並重寫它。

public class Movement : MonoBehaviour {
   public float speed;
   public Rigidbody2D body;
   // Update is called once per frame
   void Update() {
      float h = Input.GetAxisRaw(“Horizontal”);
      float v = Input.GetAxisRaw(“Vertical”);
      body.velocity = new Vector2(h * speed, v * speed);
   }
}

我們可以看到,我們在宣告中建立了對Rigidbody2D的引用,並且我們的更新程式碼作用於該引用而不是物件的變換。這意味著剛體現在承擔了移動的責任。

您可能期望body引用丟擲NullReferenceException,因為我們尚未為其分配任何值。如果您按原樣編譯並運行遊戲,您將在編輯器的左下角看到以下錯誤。

Body Reference

為了解決這個問題,讓我們考慮一下指令碼建立的元件。請記住,公共屬性會在Unity中建立它們自己的欄位,就像我們對speed變數所做的那樣。

Collisions

將速度調整到更高的值,大約5,然後運行遊戲。

您的碰撞現在將正常工作!

廣告