Rigidbodyで出来ることを知ろう

概要

最終更新日:2020/03/08

UnityのRigidbodyの基本の説明と使い方について書いた記事です。
主に次の項目に該当する方に向けて書いています。
  • Rigidbodyとは何かを知りたい
  • Rigidbodyでできることを知りたい

サンプル

サンプルはここからダウンロードできます。
環境については以下の内容となっています。

開発環境
Unityのバージョン Unity 2019.19f1


Rigidbodyとは

Rigidbodyとはゲームオブジェクトに物理演算処理を行うための
情報を付与するコンポーネントです。

このコンポーネントを設定することにより、
ゲームオブジェクトが重力や質量をもつことが出来るので、
重力落下をしたり、当たり判定で質量や速度の情報を反映することができます。

サンプルのシーンは実験用が「Experience01」完成版が「RigidbodyExperience」です。
次の項目からはExperience01が開かれていることを前提に書いています。

Rigidbodyの追加方法

Rigidbodyはコンポーネントなので、他のコンポーネントと同じ方法で追加できます。
まず、設定したいゲームオブジェクトを選択します。
今回はHierarchy上にある「Ball」を選択してください。

unity_beginner_0126

次にInspectorの「Add Component」ボタンをクリックします。

unity_beginner_0127

表示されたメニューから「Physics」を選択します。

unity_beginner_0128

Physicsをクリックしたら新しいメニュが表示されるので
その中から「Rigidbody」を選択します。

unity_beginner_0129

これでRigidbodyの追加は完了です。

unity_beginner_0130

Rigidbodyの項目

Rigidbodyの項目は物理計算で使用される情報がいくつも用意されていますが
この記事で使用する項目のみを紹介します。
  • Mass:質量
  • Drag:空気抵抗
  • Use Gravity:重力の使用有無

UseGravityの実験

Rigidbodyを設定した状態で実行してみてください。
Use Gravityの設定にチェックが入っているので、重力計算が行われるようになり、
起動後にBallが落下するはずです。



Use Gravityのチェックを外したら、ボールは落下しなくなります。
このようにUse Gravityは重量計算を使用の有無を決定することができます。

衝突実験

Rigidbodyを設定したゲームオブジェクト同士は当たり判定の衝突判定ができます。
衝突判定とは質量や速度などの物理計算によってオブジェクト同士が
吹き飛んだりする判定です。

サンプルのシーンは「CollisionExperience」を使います。
次の項目からはCollisionExperienceが開かれていることを前提に書いています。
※特に記事内で追加することがないので、完成版は用意していません。

衝突の条件

衝突判定を行うためには以下の条件を満たしている必要があります。
  • 二つのゲームオブジェクトはColliderを持っている
  • 二つのゲームオブジェクトはColliderのIsTrigger項目のチェックが外れている
  • どちらかのゲームオブジェクトはRigidbodyを持っている
衝突では二つのゲームオブジェクトが必要となります。
上の条件はその二つのゲームオブジェクトを対象とした内容です。

Colliderとは

Colliderとは当たり判定用の形状設定をすることが出来るコンポーネントです。
「SphereCollider」や「BoxCollider」など様々な形状があります。

unity_beginner_0131

このColliderが共通して持っている項目の一つが「IsTrigger」です。
衝突の条件にあるように衝突判定を行うには、この項目にチェックを入れてはいけませんunity_beginner_0132

Massの実験

それではRigidbodyの質量設定である「Mass」の実験です。
シーンを実行したら、起動後にキーボードのAキーを長押ししてください。
押している間はゲージがたまりますので、ある程度たまったらキーを離してください。

キーが離れたらボールが移動してブロックに当たります。
この時にボールが勢いで跳ね返り、ブロックは少しだけ傾きます。



では、RigidbodyのMassの値を変更して、挙動の変化を見てみたいと思います。
BlockオブジェクトのRigidbodyのMass項目の値を「5」にして動かしてください。

unity_beginner_0133

その結果、変更前のようにボールがぶつかってもブロックが動きません。



これはMass(質量)を増やしたことで、ある程度の衝突では動かなくなっています。
次は、Massの項目を「0.5」にして動かしてください。

unity_beginner_0134

結果は、ボールがぶつかったら後ろに押しやられています。



質量を減らしたため、衝突に耐えられなくなった結果です。
このようにMass項目を変更したら、ゲームオブジェクトの質量が変わるので、
衝突した時のゲームオブジェクトが大きく移動したり、全く動かなかったりと変化します。

Dragの実験

次は空気抵抗の設定である「Drag」の実験です。
空抵抗を大きくしたら移動量が小さくなります。
「Ball」のRigidbodyのDragの設定は「0」なので「2」に変更して実行してください。

unity_beginner_0135

結果はゲージを最大までためても、途中で失速してブロックに届きません。



このようにDragの値を使えばゲームオブジェクトの形状に合わせて
空気抵抗を変えることができるので、よりリアルな動きを実装できます。

まとめ


  • Rigidbodyはゲームオブジェクトに物理情報を付与する
  • Rigidbodyを設定すると衝突の判定ができる
  • 衝突にはColliderがいる
  • UseGravityは重力計算の使用有無の設定
  • Massはゲームオブジェクトの質量の設定
  • Dragはゲームオブジェクトの空気抵抗の設定