Rigidbody 2D コンポーネントによりオブジェクトに物理挙動を作用させます。標準の Rigidbody コンポーネントの多くの概念は Rigidbody 2D に引き継がれるものの、オブジェクトは XY 平面でのみ移動し、この平面に垂直な軸でのみ回転します。
プロパティー | 機能 |
---|---|
Use Auto Mass | Rigidbody 2D がその 2D コライダーから自動的にゲームオブジェクトの大きさを検出し予測するようにしたい場合はこのボックスをチェックします。 |
Mass | Rigidbody 2D の大きさ。Use Auto Mass を選択している場合は、選択不可。 |
Linear Drag | 位置移動の減衰値。 |
Angular Drag | 回転移動の減衰値。 |
Gravity Scale | ゲームオブジェクトにかかる重力の度合い。 |
Is Kinematic | 力や衝突で Rigidbody 2D に影響を与えたり動かしたりしたい場合は、このボックスをチェックしてください。詳しくは後述の Kinematic Rigidbody 2D コンポーネント を参照してください。 |
Interpolate | 物理計算が更新されるとき、どのようにオブジェクト動作を補間するかを選択します (動きがぎこちないときに役に立ちます)。 |
None | スムージングを適用しません。 |
Interpolate | 前フレームでのオブジェクト位置にもとづいて動作をスムージングする。 |
Extrapolate | 次フレームでのオブジェクト位置の予測にもとづいて動作をスムージングします。 |
Sleeping Mode | プロセッサー負荷を抑えるためのオブジェクトのスリープ方法。 |
Never Sleep | スリープを無効にする。ランタイムにリソースに大きなダメージを与える場合もあるので、可能な限りこの設定は避けるべきです。 |
Start Awake | 起動時にオブジェクトを起こす。 |
Start Asleep | 初期状態でオブジェクトはスリープしていますが、衝突によりスリープが解除されます。 |
Collision Detection | 他のオブジェクトとの衝突検知の方法。 |
Discrete | 物理計算の更新している間に、オブジェクトの 2D コライダーが他のコライダーと接触を起こす場合のみ衝突とみなす。 |
Continuous | 物理計算の更新時に、オブジェクトの 2D コライダーがすでに他のコライダーと接触している場合も衝突とみなす。 |
Constraints | Rigidbody 2D の動きの制限。 |
Freeze Position | Rigidbody 2D の動きを選択したワールド空間の X軸と Y軸で停止します。 |
Freeze Position | Rigidbody 2D の動きをワールド空間の Z軸で選択して停止します。 |
通常は、Unity Editor の Transform コンポーネントによってオブジェクト (とその子オブジェクト) のシーン内の位置、回転、スケールが決まります。Transform コンポーネントが変更されると、他のコンポーネントを更新します。それにより、どこにレンダリングするか、どこにコライダーを置くかなどが更新される場合があります。2D の物理演算エンジンはコライダーを動かし、互いに相互作用させることができます。ですから、物理演算エンジンがコライダーの動きの情報を Transform コンポーネントに返すためのメソッドが必要です。コライダーに関わるこの動きと接点を伝えるために Rigidbody 2D コンポーネントは存在します。
Rigidbody 2D コンポーネントは Transform をオーバーライドし、Rigidbody 2D によって決められた位置/回転へ更新します。Transform コンポーネントを手動で変更することによって Rigidbody 2D をオーバーライドすることもできますが (Unity はすべてのコンポーネントに関するすべてのプロパティーを表示するので)、オブジェクトが互いに通り抜けたり、中に入ったり、予期せぬ動きをしたりするなど、問題の原因となることもあります。
オブジェクトや子のオブジェクトに加えた Collider 2D コンポーネントは暗示的に Rigidbody 2D にアタッチされます。Collider 2D が Rigidbody 2D にアタッチされると、一緒に移動します。Collider 2D は 、Transform やコライダーオフセットを使って直接動かされることは決してありません。代わりに、Rigidbody 2D を動かします。こうすることで最良のパフォーマンスを得、正しく衝突を検出できます。1つの Rigidbody 2D にアタッチする複数の Collider 2D は互いに衝突しません。つまり、1つの合成コライダーとして効率的に動くひとまとまりのコライダーを作ることができます。すべてのコライダーがその Rigidbody 2D と同期して動いたり回転したりします。
シーンをデザインするとき、自由にデフォルトの Rigidbody 2D を使い、コライダーをアタッチし始めることができます。これらのコライダーは、他の Rigidbody 2D にアタッチしたコライダーと互いに衝突できます。
ヒント
Rigidbody 2D の追加によりスクリプト API から力を加えてスプライトの動作を見映えのよい物理挙動にできます。スプライトオブジェクトに適切なコライダーコンポーネントをアタッチすると、他の移動オブジェクトとの衝突も検知します。物理挙動を使用すれば、よくあるゲーム動作の多くを単純化するのみならず、リアルで迫力ある動作を最小限のコーディングで実現できます。
Is Kinematic 設定により Rigidbody 2D の物理挙動を無効にして、重力や衝突に反応しないようにします。オブジェクトを物理挙動でないスクリプトで制御するために主に使用しつつ、特定の状況では物理挙動に切り替えます。例えば、プレイヤーは歩くことにより普通に移動しつつ (物理演算なしで処理した方がよい)、爆発やヒットがあったときに上空に投げ出されます (物理演算で処理した方がよい)。物理演算を使用して投げ出す効果を実現するためには、オブジェクトに大きな力を適用する直前に Is Kinematic を無効にします。