Rigidbody により, GameObject が物理特性の制御下で動作するようになります。 リジッドボディは,力やトルクを受け,現実的な方向にオブジェクトを動かすことができます。 GameObject は,重力の影響を影響を受けるリジッドボディを含めるか,スクリプティングを通じて加えた力の下で動作するか,NVIDIA PhysX 物理特性エンジンを通じて,その他のオブジェクトと相互作用する必要があります。
プロパティ: | 特徴: |
---|---|
Mass | オブジェクトの質量 (単位 : kg)。 質量は,他のリジッドボディのおよそ 100 倍 以上にすべきではありません。 |
Drag | 力により動く際に,オブジェクトに影響する空気抵抗の量。 0 の場合,空気抵抗が 0 で,無限の場合,オブジェクトは直ちに動きを止めます。 |
Angular Drag | トルクにより回転する際に,オブジェクトに影響する空気抵抗の量。 0 の場合,空気抵抗なし。このパラメータの値を無限 (infinity) に設定するだけでは,オブジェクトの回転を直ちにを止められないことに留意して下さい。 |
Use Gravity | 有効にすると,オブジェクトは重力の影響を受けます。 |
Is Kinematic | 有効にすると,オブジェクトは物理特性エンジンによって駆動されませんが,その Transform によってのみ操作できます。 これは,プラットフォームを移したい場合や,HingeJoint を追加したリジッドボディをアニメート化したい場合に便利です。 |
Interpolate | Rigidbody の動きがぎこちないとき,次のオプションを試して下さい |
None | 補間を適用しない。 |
Interpolate | 前フレームの Transform にもとづいて Transform のスムージング。 |
Extrapolate | 前フレームの Transform にもとづいて Transform のスムージング。 |
Collision Detection | 高速で動くオブジェクトが,衝突を検知せずにすり抜けることを防止するために使用します。 |
Discrete | Use Discreet collision detection against all other colliders in the scene. Other colliders will use Discreet collision detection when testing for collision against it. Used for normal collisions (This is the default value). |
Continuous | 動的な コライダ (リジッドボディあり) にはDiscrete (不連続) な 衝突,静的なメッシュコライダ (リジッドボディなし) には Continuous (連続)な衝突を適用します。Continuous Dynamic を適用した リジッドボディ に対する衝突は,Continuous な衝突検知をします。これはContinuous Dynamic を適用したオブジェクトの衝突相手として使用します。(物理演算のパフォーマンスに大きく影響するため,高速なオブジェクトの衝突で問題が出ない場合はDiscrete のままにして下さい。) |
Continuous Dynamic | Continuous および Continuous Dynamic 衝突を適用したオブジェクトに対して,Continuous な衝突検知を行ないます。 静的なメッシュコライダ (リジッドボディ なし) にも Continuous な 衝突 を適用します。その他の コライダ については Discrete な衝突検知を行なう。高速で動くオブジェクトに使用します。 |
Constraints | リジッドボディの動きに関する制限:- |
Freeze Position | ワールド座標系の X,Y,Z 軸で移動するリジッドボディを選択的に停止します。 |
Freeze Rotation | ワールド座標系の X,Y,Z 軸で回転するリジッドボディを選択的に停止します。 |
Rigidbody により,GameObject が物理特性エンジンの制御下で動作するようになります。 これにより,現実的な衝突,多様な種類のジョイント,その他のクールな動作へのゲートウェイが開きます。 リジッドボディに力を加えることで,GameObject を操作することによって, Component を直接調整した場合とは違うルック & フィールを作成します。 一般に,リジッドボディと同じ GameObject のトランスフォームのどちらか一方だけを操作しないでください。
トランスフォームの操作とリジッドボディ間の最大の差は,力を使用するかしないかです。 リジッドボディは,力やトルクを受けることができますが,トランスフォームはできません。 トランスフォームは移動や回転はできますが,物理特性の使用とは異なります。 自分で試した場合は,その顕著な差に気づくでしょう。 リジッドボディに力/トルクを加えると,実際にオブジェクトの位置やトランスフォーム コンポーネントの回転を変更します。 このため,どちら一方だけを使用する必要があります。 物理特性使用中にトランスフォームを変更すると,衝突やその他の計算に問題が生じる場合があります。
リジッドボディは,物理特性エンジンに影響を受ける前に,GameObject に明示的に追加する必要があります。 メニューバーで「Components->Physics->Rigidbody」から選択したオブジェクトにリジッドボディを追加できます。 オブジェクトで物理特性の準備ができました。重力下に置かれ,スクリプティングを介して,力を受けることができますが, Collider またはジョイントを追加して,正確に希望通りに動作させる必要があります。
オブジェクトが物理特性の制御下にある場合,トランスフォームの親が移動する方法から半分独立して移動します。 親を移動すると,リジッドボディの子をそれに沿って引っ張ります。 しかし,リジッドボディは重力および衝突イベントへの対応により,落下していきます。
リジッドボディをコントロールするため,最初にスクリプトを使用して,力またはトルクを追加します。 「AddForce() 」 と「AddTorque() 」をオブジェクトのリジッドボディで呼び出すことでこれを行います。 物理特性を使用する際は,オブジェクトのトランスフォームを直接買えないようにしてください。
一部の状況で,主にラグドール効果を作成する場合に,アニメーションと物理特性間でオブジェクトのコントロールを切り替える必要があります。 このため,リジッドボディには,「isKinematic 」と付けることができます。 リジッドボディに「isKinematic」と付いている場合,衝突や力,physX のその他の部分の影響を受けません。 This means that you will have to control the object by manipulating the Transform コンポーネントを直接操作することで,オブジェクトをコントロールする必要があるということです。 キネマティック リジッドボディはその他のオブジェクトに影響しますが,これら自体は物理特性の影響を受けません。 例えば,キネマティック オブジェクトに追加されるジョイントは,そこに追加されたその他のリジッドボディを制約し,キネマティック リジッドボディは衝突を通じて,その他のリジッドボディに影響します。
コライダは,衝突を発生させるために,リジッドボディと共に追加する必要のある別の種類のコンポーネントです。 2 つのリジッドボディが互いに衝突する場合,物理特性エンジンは,両方のオブジェクトもコライダを追加するまで,衝突を計算しません。 コライダのないリジッドボディは,物理特性シミュレーション中に互いを簡単に通過します。
「コライダはリジッドボディの物理特性の境界を定義します」
「Component->Physics」メニューでコライダを追加します。 詳細については,個々のコライダのコンポーネント リファレンス ページを参照してください。
複合コライダはプリミティブなコライダの組み合わせによりひとつのコライダとしての挙動を示すものです。便利な場面としては複雑なメッシュをコライダでしようしたいが,Mesh Colliderを使用できないケースです。複合コライダを作成する際はコライダオブジェクトの子オブジェクトを作成し,それから各々の子オブジェクトにプリミティブなコライダを追加します。これにより各々のコライダを別々に容易に配置,回転,拡大縮小することが出来ます。
上記の図では,ガンモデルのゲームオブジェクトはリジッドボディがアタッチされてあり,子オブジェクトして複数のプリミティブなコライダを含みます。親のRigidbodyが力により動かされた場合,子コライダが追従して動きます。プリミティブなコライダは環境上にあるMesh Colliderと衝突し,親Rigidbodyは自身に加えられた力の作用,子コライダがシーン上他のコライダとの衝突した作用,の双方を加味して軌道が変化します。
Mesh Collider同士は通常では衝突しませんが,Convexをオンにした場合のみ衝突することが出来ます。良くある方法として,動く全てのオブジェクトにはプリミティブなコライダを組み合わせ,動かない背景のオブジェクトにMesh Colliderを使います。
連続衝突検知は,高速移動するコライダが互いにすり抜けないようにする機能です。 これは,通常の(「Discrete」) 衝突検知使用時,オブジェクトが 1 つのフレームでコライダの片側にあり,次のフレームでコライダを通過している場合に発生することがあります。 これを解決するには,高速移動するオブジェクトのリジッドボディで連続衝突検知を有効にできます。 衝突検知モードを「Continuous」に切り替え,リジッドボディがスタティックな (つまり,非リジッドボディ) メッシュコライダ を通過させないようにします。 衝突検知モードを「Continuous Dynamic」に切り替え,リジッドボディが,衝突検知モードを「Continuous」または「Continuous Dynamic」に設定したその他のサポートされているリジッドボディを通過させないようにします。
連続衝突検知は,Box,Sphere および Capsule の コライダ でサポートされています。連続衝突検知は,オブジェクトですり抜けが発生してしまう場合に衝突をキャッチするためのセーフティネットが意図する用途ですが,物理的に正確な衝突結果が得られるわけではないため,高速に動くオブジェクトで問題がある場合は,TimeMangerインスペクタにある固定 Time step 変数を減らしてシミュレーションをより厳密に行うことが出来ます。
GameObject のメッシュのサイズは,リジッドボディの質量よりもはるかに重要です。 リジッドボディが期待通りに動作しなていない場合,ゆっくり移動するか,浮くか,正しく衝突しません。 Unity のデフォルトの単位スケールは,1 単位 = 1 メートルなので,インポートされたメッシュのスケールは維持され,物理特性計算に適用されます。 例えば,倒壊しかけている高層ビルは,積み木で作った塔とはかなり違う形で崩れるため,正確にスケールするには,サイズの異なるオブジェクトをモデル化する必要があります。
If you are modeling a human make sure he is around 2 meters tall in Unity. To check if your object has the right size compare it to the default cube. You can create a cube using
. The cube’s height will be exactly 1 meter, so your human should be twice as tall.メッシュ自体を調整できない場合,Project View で選択し,メニューバーから を選択することで,特定のメッシュ アセットの均一なスケールを変更できます。 ここでは,スケールを変更し,メッシュを再インポートできます。
ゲームで,GameObject を異なるスケールでインスタンス化する必要がある場合,トランスフォームのスケール軸の値を調整しても大丈夫です。 欠点は,物理特性シミュレーションは,オブジェクトのインスタンス化時に更に多くの作業をする必要があり,ゲーム内でパフォーマンスの低下を引き起こす可能性があります。 これは大きな損失ではありませんが,他の 2 つのオプションでスケールを仕上げることほど効率的ではありません。 不均一なスケールだと,パレンディング使用時に望まぬ動作を生じる場合があります。 このため,モデリング アプリケーションで正しいスケールでオブジェクトを作成するのが常に最適です。