Unity-rigidbodies-and-physics
提供:Dev Guides
ユニティ-剛体と物理学
前章の衝突の主な問題はコードにありました。 * GameObjectの位置の値を直接変更します*。 プレイヤーがキーを押している場合、単に位置に値を追加しています。 境界線や他のGameObjectに適切に反応するようにプレーヤーを移動させる方法が必要です。
そのためには、*剛体*とは何かを理解する必要があります。 リジッドボディは、GameObjectが*リアルタイム物理*に反応できるようにするコンポーネントです。 これには、力と重力、質量、抗力、運動量に対する反応が含まれます。
*Add Component* をクリックして、検索フィールドにRigidbody2Dを入力するだけで、RigidbodyをGameObjectにアタッチできます。
Rigidbody2Dをクリックすると、コンポーネントがGameObjectにアタッチされます。 添付されたので、多くの新しいフィールドが開かれたことがわかります。
デフォルト設定では、GameObjectは重力により垂直に*下*に落ちます。 これを回避するには、 Gravity Scale を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をスローすることが予想されます。何も割り当てていないためです。 ゲームをそのままコンパイルして実行すると、エディターの左下に次のエラーが表示されます
これを修正するために、スクリプトによって作成されたコンポーネントを考えてみましょう。 速度変数で行ったように、パブリックプロパティはUnityで独自のフィールドを作成することに注意してください。
速度を5前後のより高い値に調整し、ゲームをプレイします。
これで衝突が正しく機能するようになりました!