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前後の高い値に調整し、ゲームをプレイします。
これで、衝突が正しく機能するようになります。