【初心者Unity】はじめに知っておくべきRigidbodyコンポーネントの概要
▶
【Unity】3Dアクションゲームを作ろう!#7 ステージの作成(Skybox・落下判定)
▶
【Unity】3Dアクションゲームを作ろう!#8 ステージの作成(スイッチ・扉)
▶
【Unity】3Dアクションゲームを作ろう!#9 プレイヤーのHP管理
▶
【初心者Unity】JsonUtilityクラスでJSONを扱う方法
▶
【初心者Unity】スクリプトからコンポーネントを追加する方法
Rigidbodyコンポーネントの概要
Rigidbodyコンポーネントは、ゲームオブジェクトに物理演算を適用するコンポーネントです。
重力、空気抵抗や摩擦、ぶつかって弾かれるなどの複雑な物理演算を、プログラムを記述することなく再現することができます。
重力による落下などもCubeなどにRigidbodyコンポーネントを適用してゲームシーンを再生するだけで再現することができます。
このシーンではすべてのオブジェクトにRigidbodyコンポーネントを追加して、位置を調整して再生したものです。
(支柱となっている棒のオブジェクトだけ物理演算を無効にしています。)
スクリプトは使っていません。
自由落下、衝突によるエネルギーの伝達、摩擦などの事象がRigidbodyコンポーネントのみで再現されています。
(衝突するという機能のみColliderコンポーネントが担っていますが、衝突の結果として起こる事象は物理演算によって再現されています。)
このようにRigidbodyコンポーネントは、Unityにて現実的な挙動を表現するための重要な役割を担っています。
プロパティについて
Rigidbodyコンポーネントの各プロパティについて、どのような設定ができるのか簡単に紹介しておきます。
より具体的なRigidbodyの使い方については参考記事を参照してください。
(参考)
【初心者Unity】Rigidbody(物理演算)の使い方①
【初心者Unity】Rigidbody(物理演算)の使い方② -velocity-
■Mass
オブジェクトの質量で、単位はKg(キログラム)です。(デフォルト1)
落下速度には影響を与えませんが、キャラクターのジャンプや移動処理を物理演算で行う場合には動作に影響を与えるプロパティとなります。
※ 互いに作用するオブジェクト同士の重さは100倍以下に設定することが推奨されています。(公式リファレンスより)
■Drag
空気抵抗です。(デフォルト0)
値を大きくすると落下速度など物理演算による移動速度が遅くなります。
簡単なアクションゲーム等、厳密な物理演算を必要としないゲームでは0にしてしまうことが多いです。
■Angular Drag
回転に対する抵抗です。(デフォルト0.05)
回転を用いない場合には特に変更しないか、0にしてしまうことが多いです。
■Use Gravity
チェックを入れるとオブジェクトが重力の影響を受けます。(デフォルト有効)
チェックを外すとオブジェクトを無重力状態のように扱えます。浮いているけどぶつかれば動くような障害物などではチェックを外します。
■Is Kinematic
チェックを入れると物理演算が無効になります。(デフォルト無効)
重力が有効でも落下せず、他のオブジェクトが衝突しても移動しません。
基本動かないけれど、物理演算で動くオブジェクトと接触するようなオブジェクトに設定すされます。
ゲーム中に物理演算の有効無効を切り替えたい場合、この項目をプログラムからON/OFFします。
■Interpolate
物理演算動作の補完モードです。(デフォルトnone)
動きが滑らかでない場合に有効にすることでカクつきを抑えることができます。
ただし演算負荷も上がるため、問題が無ければ変更しません。
■Collision Detection
衝突の判定方式です。(デフォルトDiscrete)
オブジェクトの動きが速くて衝突判定をすり抜けてしまう場合などに、この項目を変更することで想定した結果を得られます。
こちらも演算負荷の観点から無用に設定を上げることは避けます。
■Constraints
XYZ軸ごとに移動や回転を制限するためのチェックです。(デフォルト無効)
特にFreeze Rotationはラン&ジャンプのゲームなどで活躍します。
設定しないと床についたときに摩擦でキャラクターが回転したりします。
■Info
Rigidbodyが内部的に保持している物理演算の値が表示されています。
インスペクタからは参照のみですが、スクリプトからであればここに表示されている値を直接変更したりもできます。