UnityのRigidbodyとは? 使い方について
UnityのRigidbodyとは物理演算を扱うコンポーメントだ。ゲームオブジェクト、コンポーメント、シーンビュー、ゲームビュー、オブジェクトの親子関係についてわからない場合は以下の記事で確認するのがおすすめ。
ゲームオブジェクトとは
コンポーメントとは
シーンビューの操作
ゲームビューの操作
オブジェクトの親子関係
Rigidbodyの使い方や詳細について紹介していく。
UnityのRigidbody目次
Rigidbodyの使い方親子関係時の物理演算
目次にもどる
Rigidbodyの使い方
Rigidbodyの使い方を説明していく。まずSphereのゲームオブジェクトを作成。以下のようにインスペクターのTransformのPositionのYの値を変えて高さを上げ浮かせた状態にするとわかりやすい。次にインスペクター欄の「Add Component」を選択しよう。
「Physics」→「Rigidbody」のように選択することでSphereにRigidbodyのコンポーネントがつく。
この状態で画面上にある再生ボタンを押してみよう。
ゲームビューまたはシーンビューを見ると、どこまでも降下していくのが確認できる。もう一度再生ボタンを押すと元の位置に戻る(なお再生ボタンを押すとシーンビューのみ開いている場合はゲームビューに切り替わる。再生ボタンを押して何も見えない場合はメインカメラの位置を調整すること)。
次にSphereのゲームオブジェクトのインスペクターにSphere Colliderのコンポーネントがあることを確認しよう。
Collider系のコンポーネントは当たり判定を設定することができる。Sphereに限らず、最初から用意されているゲームオブジェクトにはCollider系のコンポーネントか最初からついている。
続いてゲームオブジェクトのCylinderを作成し先ほど配置したSphereの真下に配置してみよう(2つのゲームオブジェクトのTransformをXとZをどちらも同じ値にし、高さとなるYの数値のみ変えると素早くできる)。
この状態で再生ボタンを押してみると、Sphereが降下するがCylinderのところまで達すると停止する。
SphereにもCylinderにも当たり判定のあるCollider系のコンポーネントがついているためこの現象が起こる。
コンポーネントのうち、以下のようにチェックボックスがついているものはチェックを外すことで無効化できる。
今回はCylinderのCapsule Colliderのコンポーメントのチェックを外してみた。
この状態で再生ボタンを押すとSphereがCylinderをすり抜けて、そのまま降下していくのが確認できる。
続いて、再生ボタンを押すとSphereがCylinderに接触せずに落ちる位置関係にゲームオブジェクトを移動させよう。
この状態でCylinderのCapsule Colliderの外したチェックを元に戻し、当たり判定の大きさを変更する。
Radiusの値を増加させた。この際物体の見た目の大きさよりも当たり判定が大きくなり、当たり判定を示す緑色の線がはみ出しているのがわかる。
この状態で再生ボタンを押すと以下のように、Sphereは降下した後Cylinderにぶつからずとも、Cylinderの当たり判定に衝突する。
だが、Capsule Colliderの当たり判定はカプセル状であり平らではない。よって、Sphereは一度衝突した後に軌道を変え降下することが確認できる。
目次にもどる
親子関係時の物理演算
もう一度、Sphereの真下にCylinderを作成しよう。SphereのRigidbodyのコンポーネントはそのままだが、Cylinderの当たり判定は元に戻そう(前の値なんか覚えてない場合はゲームオブジェクトを削除し最初から作り直すのが速い)。続いてCubeのゲームオブジェクトを作成し、Sphereの横に配置する。そしてCubeをSphereの子にして親子関係を作ろう。
この状態で再生ボタンを押す。すると、SphereとCubeが降下し、SphereはCylinderに衝突するもその後にCubeが落下した方向に落ちていくのが確認できる。
なぜかと言えば、重心がSphereではなく、SphereとCubeの中心に移動しているからだ。
RigidbodyのコンポーネントがついたゲームオブジェクトはCollider系コンポーネントを持つ子全てを合わせた中心を重心にする。
重心はCollider系コンポーネントを持たない子には影響されない。例えばCubeのBox Colliderのチェックを外して無効にしてみる。
この状態で再生すると、CubeはSphereの子なので落下はする。だが重心は2つのゲームオブジェクトの中心ではなくSphereにあるので、以下のような状態で停止する。
ゲームオブジェクト同士を親子関係にするのは物理演算が目的ではない場合もある(位置関係のみ追従させる目的で親子関係にする場合など)。
親子関係にはするが、物理演算は親と子別々にしたい場合には子にもRigidbodyのコンポーネントをつけてやればいい(加えて、先ほど無効にしたBox Colliderのチェックをつけて元に戻そう)。
この状態で再生ボタンを押すと、SphereとCubeは両方落下するが、SphereはCylinderに衝突して停止する。だが、Cubeはそれに影響を受けずそのまま真下に落下し続ける。