公開日:2023/05/04  更新日:2023/05/04

UnityのRigidbodyとは? 使い方について

 UnityのRigidbodyとは物理演算を扱うコンポーメントだ。
 ゲームオブジェクト、コンポーメント、シーンビュー、ゲームビュー、オブジェクトの親子関係についてわからない場合は以下の記事で確認するのがおすすめ。
ゲームオブジェクトとは
コンポーメントとは
シーンビューの操作
ゲームビューの操作
オブジェクトの親子関係
 Rigidbodyの使い方や詳細について紹介していく。


UnityのRigidbody目次

Rigidbodyの使い方
親子関係時の物理演算
目次にもどる

Rigidbodyの使い方

 Rigidbodyの使い方を説明していく。

 まずSphereのゲームオブジェクトを作成。以下のようにインスペクターのTransformのPositionのYの値を変えて高さを上げ浮かせた状態にするとわかりやすい。次にインスペクター欄の「Add Component」を選択しよう。
  Unityのゲームオブジェクトの「Add Component」を選択
 「Physics」→「Rigidbody」のように選択することでSphereにRigidbodyのコンポーネントがつく。
UnityのRigidbodyのコンポーネント
 この状態で画面上にある再生ボタンを押してみよう。
Unityの再生ボタン選択
 ゲームビューまたはシーンビューを見ると、どこまでも降下していくのが確認できる。もう一度再生ボタンを押すと元の位置に戻る(なお再生ボタンを押すとシーンビューのみ開いている場合はゲームビューに切り替わる。再生ボタンを押して何も見えない場合はメインカメラの位置を調整すること)。

 次にSphereのゲームオブジェクトのインスペクターにSphere Colliderのコンポーネントがあることを確認しよう。
UnityのSphere Colliderのコンポーネント
 Collider系のコンポーネントは当たり判定を設定することができる。Sphereに限らず、最初から用意されているゲームオブジェクトにはCollider系のコンポーネントか最初からついている。
 続いてゲームオブジェクトのCylinderを作成し先ほど配置したSphereの真下に配置してみよう(2つのゲームオブジェクトのTransformをXとZをどちらも同じ値にし、高さとなるYの数値のみ変えると素早くできる)。
Unityの画面でCylinderが下、Sphereが上にある
 この状態で再生ボタンを押してみると、Sphereが降下するがCylinderのところまで達すると停止する。
Unityの画面でCylinderが下、Sphereが上にある
 SphereにもCylinderにも当たり判定のあるCollider系のコンポーネントがついているためこの現象が起こる。
 コンポーネントのうち、以下のようにチェックボックスがついているものはチェックを外すことで無効化できる。
Unityのコンポーネントのチェックを外す
 今回はCylinderのCapsule Colliderのコンポーメントのチェックを外してみた。
 この状態で再生ボタンを押すとSphereがCylinderをすり抜けて、そのまま降下していくのが確認できる。
UnityのSphereがCylinderをすり抜け

 続いて、再生ボタンを押すとSphereがCylinderに接触せずに落ちる位置関係にゲームオブジェクトを移動させよう。
Unityの画面でCylinderが下、Sphereが上のずれた位置にある
 この状態でCylinderのCapsule Colliderの外したチェックを元に戻し、当たり判定の大きさを変更する。
 Radiusの値を増加させた。この際物体の見た目の大きさよりも当たり判定が大きくなり、当たり判定を示す緑色の線がはみ出しているのがわかる。
Unityの当たり判定
 この状態で再生ボタンを押すと以下のように、Sphereは降下した後Cylinderにぶつからずとも、Cylinderの当たり判定に衝突する。
Unityの当たり判定に衝突
 だが、Capsule Colliderの当たり判定はカプセル状であり平らではない。よって、Sphereは一度衝突した後に軌道を変え降下することが確認できる。
目次にもどる

親子関係時の物理演算

 もう一度、Sphereの真下にCylinderを作成しよう。SphereのRigidbodyのコンポーネントはそのままだが、Cylinderの当たり判定は元に戻そう(前の値なんか覚えてない場合はゲームオブジェクトを削除し最初から作り直すのが速い)。
Unityの画面でCylinderが下、Sphereが上にある
 続いてCubeのゲームオブジェクトを作成し、Sphereの横に配置する。そしてCubeをSphereの子にして親子関係を作ろう。
Unityの3つ目のゲームオブジェクト
 この状態で再生ボタンを押す。すると、SphereとCubeが降下し、SphereはCylinderに衝突するもその後にCubeが落下した方向に落ちていくのが確認できる。
Unityの再生時の衝突結果
 なぜかと言えば、重心がSphereではなく、SphereとCubeの中心に移動しているからだ。
 RigidbodyのコンポーネントがついたゲームオブジェクトはCollider系コンポーネントを持つ子全てを合わせた中心を重心にする
 重心はCollider系コンポーネントを持たない子には影響されない。例えばCubeのBox Colliderのチェックを外して無効にしてみる。
Unityのコンポーネントのチェック外す
 この状態で再生すると、CubeはSphereの子なので落下はする。だが重心は2つのゲームオブジェクトの中心ではなくSphereにあるので、以下のような状態で停止する。
Unityの再生時の衝突結果

 ゲームオブジェクト同士を親子関係にするのは物理演算が目的ではない場合もある(位置関係のみ追従させる目的で親子関係にする場合など)。
 親子関係にはするが、物理演算は親と子別々にしたい場合には子にもRigidbodyのコンポーネントをつけてやればいい(加えて、先ほど無効にしたBox Colliderのチェックをつけて元に戻そう)。
 この状態で再生ボタンを押すと、SphereとCubeは両方落下するが、SphereはCylinderに衝突して停止する。だが、Cubeはそれに影響を受けずそのまま真下に落下し続ける。
Unityの再生時の衝突結果

Unityの基礎まとめへ戻る

page top