Unity-リジッドボディと物理学

前の章での衝突の主な問題はコードにありました。 We will now modify the values of the GameObject’s position directly。プレーヤーがキーを押している場合は、単に位置に値を追加しているだけです。境界や他のゲームオブジェクトに適切に反応するようにプレーヤーを動かす方法が必要です。

そのためには、何を理解する必要があります rigidbodiesです。リジッドボディは、GameObjectが反応することを可能にするコンポーネントですreal-time physics。これには、力と重力、質量、抗力、運動量に対する反応が含まれます。

クリックするだけで、リジッドボディをゲームオブジェクトにアタッチできます。 Add Component 検索フィールドにRigidbody2Dと入力します。

Rigidbody2Dをクリックすると、コンポーネントがGameObjectにアタッチされます。添付されたので、多くの新しいフィールドが開かれていることに気付くでしょう。

デフォルト設定では、GameObjectは垂直に落下します down重力による。これを回避するには、Gravity Scale 0に。

GameObjectはまだその物理コンポーネントとは何の関係もないため、ゲームをプレイしても目に見える違いは表示されません。

問題を解決するために、コードをもう一度開いて書き直してみましょう。

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);
   }
}

作成したことがわかります reference宣言内のRigidbody2Dに変換し、更新コードはオブジェクトの変換ではなくその参照で機能します。これは、リジッドボディに移動の責任が与えられたことを意味します。

あなたは期待するかもしれません bodyNullReferenceExceptionをスローするための参照。これには、何も割り当てていないためです。ゲームをそのままコンパイルして実行すると、エディターの左下に次のエラーが表示されます。

これを修正するために、スクリプトによって作成されたコンポーネントについて考えてみましょう。パブリックプロパティは、speed変数で行ったように、Unityで独自のフィールドを作成することを忘れないでください。

速度を5前後の高い値に調整し、ゲームをプレイします。

これで、衝突が正しく機能するようになります。