Body Type (ボディタイプ) が Kinematic (キネマティック) の Rigidbody 2D は、ごく明示的なユーザー制御によってのみシミュレーション下で動くように設計されています。Dynamic (動的) Rigidbody 2D は重力や力の影響を受けますが、キネマティック Rigidbody 2D はその影響を受けません。このため、キネマティック Rigidbody 2D は、動的 Rigidbody 2D よりもシステムリソースへの負荷が低く、より高速なシミュレーションが可能です。
キネマティック Rigidbody 2D の位置変更は、Rigidbody2D.MovePosition か Rigidbody2D.MoveRotation で明示的に行われる必要があります。物理演算クエリを使用して衝突を検出し、スクリプトを使用して Rigidbody 2D がどこでどのように動くか指定します。
キネマティック Rigidbody 2D は、その速度に基づいて動くことも可能ですが、この速度は力や重力の影響を受けません。キネマティック Rigidbody 2D は、他のキネマティック Rigidbody 2D や Static (静的) Rigidbody 2D とは衝突せず、Dynamic (動的) Rigidbody 2D とだけ衝突します。キネマティック Rigidbody 2D は衝突中に、動かせないオブジェクトのように (質量が無限であるかのように) ふるまい、質量関連のプロパティはこのボディタイプでは使用できません。
プロパティ | 機能 | |
---|---|---|
Body Type | この Rigidbody 2D のコンポーネント設定の移動動作と Collider 2D の相互作用を設定するために選択します。 | |
Dynamic | この Rigidbody 2D を Dynamic ボディタイプに設定します。このボディタイプは、シミュレーション下で動くように設計されており、全ての Rigidbody 2D プロパティが使用可能です。Rigidbody 2D のデフォルトのボディタイプです。 | |
Kinematic | この Rigidbody 2D のボディタイプを Kinematic (キネマティック) に設定します。このボディタイプは、ごく明示的なユーザー制御によってのみシミュレーション下で動くように設計されています。 | |
Static | このリジッドボディ 2D を Static (静的) ボディタイプに設定する場合に選択します。このボディタイプは、シミュレーション下で全く動かないように設計されており、無限質量を持つ動かせないオブジェクトのように振るまいます。詳細は ボディタイプ: Static (静的) を参照してください。 | |
Material | この Rigidbody 2D にアタッチされている全ての Collider 2D に共通の Physics Material を設定します。ノート: Collider 2D は、独自の Material プロパティを (設定されている場合は) 使用します。ここまたは Collider 2D にマテリアルが指定されていない場合、デフォルトのオプションは None (Physics Material 2D) です。この場合、Physics 2D ウィンドウで設定可能なデフォルトのマテリアルが使用されます。 | |
Simulated | Simulated を有効にすると、ランタイムに、Rigidbody 2D とそれにアタッチされたすべての Collider 2D と Joint 2D を物理的シミュレーションと相互作用させます。無効にすると、これらのコンポーネントはシミュレーションと相互作用しません。 詳しくは後述の Rigidbody 2D プロパティ: Simulated を参照してください。このボックスはデフォルトで有効になっています。 | |
Full Kinematic Contact | Rigidbody 2D を他の全ての ボディタイプ の Rigidbody 2D と衝突させたい場合は、このプロパティを有効にします。ノート: このプロパティを無効にすると、このキネマティック Rigidbody 2D は 動的 Rigidbody 2D としか衝突しなくなります。詳しくは Full Kinematic Contact の使用 を参照してください。 | |
Collision Detection | Collider 2D 間の衝突を検知する方法を設定します。 | |
Discrete | このオプションを選択すると、Rigidbody 2D と Collider 2D を持つゲームオブジェクトが、物理演算の更新中に、重なり合ったり、十分に速い速度で移動している場合に互いを貫通したりします。衝突接触は新しい位置でのみ生成されます。 | |
Continuous | このオプションを選択すると、Rigidbody 2D と Collider 2D を持つゲームオブジェクトが、物理の更新中に互いを貫通しないようになります。代わりに Unity は、Collider 2D の最初の衝突点を計算し、そこにゲームオブジェクトを移動させます。ノート: このオプションは Discrete よりも CPU 時間がかかります。 | |
Sleeping Mode | プロセッサー負荷を抑えるために、オブジェクトがスリープするときのモードを設定します。 | |
Never Sleep | スリープを無効にする場合に選択します。重要: システムリソースに影響を与える可能性があるため、この設定はできるだけ使用しないでください。 | |
Start Awake | ゲームオブジェクトがスリープしていない状態で開始します。 | |
Start Asleep | ゲームオブジェクトが、スリープした状態で開始し、衝突によって起きる (スリープ状態でなくなる) ことが可能になります。 | |
Interpolate | 物理計算の更新の合間にオブジェクト動作をどのように補間するかを選択します。ヒント: これは、動きがぎこちない時に役立ちます。 | |
None | 動きのスムージングを適用しません。 | |
Interpolate | 前のフレームでのゲームオブジェクトの位置に基づいて動きのスムージングを行います。 | |
Extrapolate | 次のフレームの位置の推定値に基づいて動きのスムージングを行います。 | |
Constraints | Rigidbody 2D の動きの制限を設定します。 | |
Freeze Position | Rigidbody 2D の、ワールド空間の X 軸上の動きと Y 軸上の動きを選択的に停止します。 | |
Freeze Rotation | Rigidbody 2D の、ワールド空間の Z 軸周りの回転を選択的に停止します。 | |
Layer Overrides | レイヤーのオーバーライド設定を展開します。 | |
Include Layers | (他の Collider2D との衝突が発生するかどうかの決定に際して) この Rigidbody2D にアタッチされている全ての Collider2D が含むべき追加的レイヤーを選択します。詳しくは Rigidbody2D.includeLayers を参照してください。 | |
Exclude Layers | (他の Collider2D との衝突が発生するかどうかの決定に際して) この Rigidbody2D にアタッチされている全ての Collider2D が除外すべき追加的レイヤーを選択します。詳しくは Rigidbody2D.excludeLayers を参照してください。 |
Full Kinematic Contacts を有効にすると、キネマティック Rigidbody 2D が、全ての ボディタイプ の Rigidbody 2D と衝突可能になります。これは、動的 Rigidbody 2D の動作と似ていますが、キネマティック Rigidbody 2D は他の Rigidbody 2D との接触時に物理演算システムによって動かされず、無限の質量を持つ動かせないオブジェクトのように振る舞います。
このオプションを無効にすると、キネマティック Rigidbody 2D が、動的 Rigidbody 2D としか衝突せず、他の ボディタイプ と衝突しなくなります。ノート: Trigger Collider は、この規則に当てはまりません。つまり、衝突スクリプティングコールバック (OnCollisionEnter、OnCollisionStay、OnCollisionExit が発生しません。
これは、物理演算クエリ (例: Physics.Raycast) を使用して Rigidbody 2D がどこでどのように動くかを検出する場合や、相互作用するために複数のキネマティック Rigidbody 2D が必要な場合には、不都合に働く場合があります。Use Full Kinematic Contacts を有効にすることで、キネマティック Rigidbody 2D のコンポーネントがそのように相互作用するようになります。
ヒント: Use Full Kinematic Contacts は、キネマティック Rigidbody 2D の位置と角度の明示的な制御を可能にしますが、完全な衝突コールバックも可能なままになります。全ての Rigidbody 2D の明示的な制御が必要な場合は、動的 Rigidbody 2D の代わりにキネマティック Rigidbody 2D を使用することで、衝突コールバックへの完全な対応を維持できます。