【初心者Unity】Rigidbody(物理演算)の使い方①
1.Rigidbodyとは
Rigidbodyとは、ゲームオブジェクトに物理演算を適用するためのコンポーネントです。
空気抵抗や重力加速度等、現実の物理法則に即した動作を実装することは途方もない作業のように思えますが、それらの本来複雑なはずの物理演算も、Rigidbodyコンポーネントを用いることで、直感的かつ簡単に設定することができます。
本記事では、Rigidbodyコンポーネントを使ってできることや、実際にRigidbodyコンポーネントを適用したゲームオブジェクトの動きなどを解説していきます。
2.実例
早速ですが、実際にゲームオブジェクトにRigidbodyコンポーネントを適用してみましょう。
以下のような構成を用意します。
各ゲームオブジェクトの設定は以下のようになっています。
■3D Object > Sphere
・Transform.Position の値変更
■3D Object > Plane
・デフォルトから変更なし
この状態でゲームを再生してみましょう!
……何も動きません。
イメージとしてはSphereが重力に従って落下して欲しいところですが、Sphereには物理演算が適用されていないので、その場から動くことはありません。
Sphereが重力に従って落下するためには、Rigidbodyコンポーネントを追加する必要があります。
■3D Object > Sphere
・Rigidbodyコンポーネント追加
(Add Component > Physics > Rigidbody)
Rigidbodyコンポーネントの各項目の説明は後述するとして、今回はUse Gravity(重力を使用)が☑されていることを確認してください。
再びゲームを再生してみましょう。Sphereが落下することが確認できるかと思います。
3.各項目の概説
項目名 | 説明 |
---|---|
Mass | ゲームオブジェクトの質量を表しています。単位はkgです。 |
Drag | ゲームオブジェクトを減速する抗力(抵抗)を表しています。空気抵抗などの表現に使用されます。 「0」を設定すると抵抗がなくなり、「Infinity」を設定すると抵抗が無限大になります。 |
Angular Drag | ゲームオブジェクトが回転を減衰させる抗力(抵抗)を表しています。 Sphereが地面を転がる際の摩擦を疑似的に表現するために使用されたりします。 (Sphereと地面の接地面が非常に小さいため、通常の摩擦の設定では上手く動作しません…) |
Use Gravity | その名の通り、重力を適用するか否かを表しています。 |
Is Kinematic | 物理演算の影響(重力やAddForce)を受けるか否かを表しています。 少しわかりづらいですが、☑が付いている場合は物理演算の影響を受けないという設定になります。 例えば、質量の設定はしたいが、重力の影響は無くしたい場合などに使用できます。 |
Interpolate | 物理演算の計算間隔と画面の描画間隔が一致しないことによるカクツキを補正してくれる機能です。 この機能を使用する場合、計算量が増えるため、多少動作が重くなります。 デフォルトはnoneで機能を使用しない設定になっています。 |
Collision Detection | 衝突の検知方法に関する設定項目です。デフォルトの設定では、衝突判定を離散的に行うため超高速で動くゲームオブジェクトの衝突を検知できず、いわゆる壁抜けが発生してしまうことがあります。 この項目の設定値を変えることで、そういった衝突検知の漏れをなくすことが可能ですが、その分計算量が増え、動作が重くなってしまいます。 |
Constraints | ゲームオブジェクトの運動方向を制限する機能です。 『Freeze Position』は移動の制限で、チェックを入れた軸方向への移動を制限することができます。 『Freeze Rotation』は回転の制限で、チェックを入れた軸を中心とする回転を制限することができます。 |