Version: 2021.3
リジッドボディ概要
ジョイント

コライダー

Collider (コライダー) コンポーネントは、物理衝突のためのゲームオブジェクトの形状を定義します。コライダーは目に見えないので、オブジェクトのメッシュと正確に同じ形状にする必要はありません。実際、メッシュを大ざっぱにあわせた方がゲームではより効率が良く、違いもわかりません。

単純な (プロセッサー負荷の小さい) コライダーを プリミティブ なタイプのコライダーと呼びます。3D には、Box ColliderSphere ColliderCapsule Collider があります。2D では、2D BoxCollider2D CircleCollider を使う事ができます。1 つのゲームオブジェクトに対してこれらのコライダーを何個でも加えて、複合コライダー を作成できます。

複合コライダー

複合コライダーは、プロセッサーのオーバーヘッドを低くおさえつつ、ゲームオブジェクトの形状をうまく近似することができます。さらに自由度を上げるためには、子ゲームオブジェクトにコライダーを追加します。例えば、親ゲームオブジェクトのローカル座標に相対的に、ボックスを回転させることができます。このような複合コライダーを作成する場合は、階層のルートオブジェクトに設定する Rigidbody コンポーネントは 1 つだけにするべきです。

プリミティブコライダーは、シアートランスフォームでは正しく機能しません。トランスフォーム階層で回転と不均一なスケールの組み合わせを使用して、結果の形状がプリミティブ形状ではなくなった場合、プリミティブコライダーはそれを正しく表現できません。

メッシュコライダー

ただし、複合コライダーでさえ十分に正確でない場合があります。3D では、Mesh Colliders (メッシュコライダー) を使用すると、ゲームオブジェクトのメッシュの形状に正確に一致させることができます。2D では、Polygon Collider 2D (2D ポリゴンコライダー) はスプライトグラフィックスの形状と完全には一致しませんが、形状を任意の LOD に調整できます。

これらのコライダーはプリミティブタイプよりもはるかにプロセッサーに負荷をかけるため、良好なパフォーマンスを維持するために慎重に使用してください。また、メッシュコライダーを別のメッシュコライダーと衝突させることはできません (つまり、接触させても何も起こりません)。Inspector でメッシュコライダーの Convex (凸状にする) にチェックすることで、これを回避できる場合があります。これにより、コライダーの形状を “凸包” に生成します。これは、元のメッシュに似ていますが、くぼみが埋められています。

この利点は、凸状メッシュコライダーは他のメッシュコライダーと衝突可能であるため、適切な形状の動くキャラクターにこの機能を使用できることです。ただし、推奨する使用法は、シーンのジオメトリにメッシュコライダーを使用し、移動するゲームオブジェクトの形状を複合プリミティブコライダーを使用して近似することです。

静的コライダー

Rigidbody (リジッドボディ) コンポーネントなしでコライダーをゲームオブジェクトに加え、シーンの床、壁、その他の静止要素を作成できます。これらは 静的 コライダーと呼ばれます。反対に、リジッドボディを持つゲームオブジェクトのコライダーは、 動的 コライダーと呼ばれます。 静的コライダーは動的コライダーと相互作用しますが、リジッドボディがないため、衝突に反応して移動することはありません。

物理マテリアル

When colliders interact, their surfaces need to simulate the properties of the material they are supposed to represent. For example, a sheet of ice will be slippery while a rubber ball will offer a lot of friction and be very bouncy. Although the shape of colliders is not deformed during collisions, their friction and bounce can be configured using Physics Materials. Getting the parameters just right can involve a bit of trial and error. A slippery material like ice, for example, has zero (or very low) friction. A grippy material like rubber has high friction and near-perfect bounciness. See the reference pages for Physic Material and Physics Material 2D for further details on the available parameters. Note that for historical reasons, the 3D asset is actually called Physic Material (without the S) but the 2D equivalent is called Physics Material 2D (with the S).

トリガー

スクリプトのシステムで衝突を検出し OnCollisionEnter 関数を使用してアクションを開始する事ができます。衝突させるのではなく、あるコライダーが他のコライダーの領域に侵入したことを検出したい場合は、物理エンジンを使えば簡単に検出可能です。コライダーを Trigger ( Is Trigger プロパティを使用します) に設定すると、固体オブジェクトとしては動作しなくなり、他のコライダーがすり抜け可能になります。任意のコライダーがトリガーに設定されたコライダーの領域に侵入すると、トリガーはトリガーオブジェクトのスクリプトにある OnTriggerEnter 関数を呼び出します。

スクリプトの衝突コールバック

衝突が発生したとき物理エンジンはオブジェクトにアタッチされたスクリプトにある特定の関数を呼び出します。衝突イベントに対応するため数ある関数の中から好きなものをコードとして配置することができます。例えば車が障害物にぶつかったときにクラッシュ音を鳴らすというようにです。

衝突が検出された時の最初の物理演算の更新で OnCollisionEnter 関数が呼び出されます。コライダー同士の接触が維持されている間の更新では OnCollisionStay 関数が呼び出され、最終的に、OnCollisionExit 関数がコライダー同士の接触が終わったことを示します。トリガーのコライダーでは類似した OnTriggerEnterOnTriggerStayOnTriggerExit 関数を飛び出します。2D 物理演算では、例えば OnCollisionEnter2D というように、関数名に 2D が加えられた同等の関数が存在します。これらの関数の詳細とサンプルコードはスクリプトリファレンスの MonoBehaviour を参照してください。

通常、非トリガー同士の衝突では、最低 1 つのオブジェクトはキネマティックでない Rigidbody (つまり Is Kinematic がオフ) でなければいけない制限があります。もし両方のオブジェクトがキネマティックの Rigidbody である場合 OnCollisionEnter その他は呼び出されません。トリガー同士の衝突ではこの制限は適用されず、Rigidbody がキネマティックでもそうでなくても、トリガーコライダーに侵入したときに OnTriggerEnter が呼び出されます。

コライダーの相互作用

コライダーは Rigidbody の設定次第で異なった相互作用をします。3 つの重要な設定は Static Collider (Rigidbody がまったくアタッチされていない)、Rigidbody ColliderKinematic Rigidbody Collider です。

静的コライダー

静的コライダーはコライダーを持ち、Rigidbody を持たないゲームオブジェクトのことを指します。静的コライダーは、大抵レベルのような、常に同じ場所に留まり、動きまわることが無いジオメトリに使用します。Rigidbody オブジェクトは静的コライダーと衝突しますが、静的コライダーを移動させることはできません。

特定のケースでは、物理エンジンは決して動かない静的コライダーを最適化します。例えば、静的コライダーの上に載っている車両は、この静的コライダーを動かしてもスリープ状態のままです。物理エンジンの計算速度に特別な影響を与えることなく、実行時に静的コライダーを有効化、無効化、または移動できます。また、スケールが均一である (傾斜していない) 限り、静的メッシュコライダーを安全にスケーリングできます。

Rigidbody コライダー

これはコライダーと通常の、キネマティックでない Rigidbody をアタッチしたゲームオブジェクトです。Rigidbody コライダーは物理演算エンジンによって完全にシミュレートされ、スクリプトから適用される衝突や力に反応することができます。それらは他のオブジェクト (静的コライダーも含む) と衝突が可能で、物理エンジンを使用するゲームではもっともよく使用されるコライダーの設定になります。

キネマティックな Rigidbody コライダー

これは、コライダーとキネマティック Rigidbody (Rigidbody の IsKinematic プロパティを有効にしたもの) をアタッチしたゲームオブジェクトです。Transform コンポーネントの変更によってスクリプトから キネマティック Rigidbody オブジェクトを動かすことが可能ですが、キネマティックでない Rigidbody のように衝突や力を加えて動かすことはできません。キネマティック Rigidbody はたまに動かしたり、無効/有効にするコライダーのために使用しますが、それ以外は静的コライダーのような動作をします。例の 1 つとして、通常、固定された物理的な障害物であるスライドドアですが、必要に応じてドアが開きます。静的コライダーとは異なり、他のオブジェクトと接触するとき、動くキネマティック Rigidbody によって他のオブジェクトに摩擦が生じ、他の Rigidbody が呼び起こされます。

移動しない場合でも、キネマティック Rigidbody は静的コライダーとは異なる動作をします。例えばコライダーにトリガーが設定されているとき、スクリプト内でトリガーイベントを受信するためには Rigidbody を追加する必要があります。トリガーを重力の影響で落下させたくないときや物理エンジンの影響を受けさせたくない場合は Rigidbody の IsKinematic にチェックを入れます。

Rigidbody コンポーネントの動作は IsKinematic プロパティを使う事で、いつでも通常の状態とキネマティックを切り替える事ができます。

A common example of this is the “ragdoll” effect where a character normally moves under animation but is thrown physically by an explosion or a heavy collision. The character’s limbs can each be given their own Rigidbody component with IsKinematic enabled by default. The limbs move normally by animation until IsKinematic is switched off for all of them and they immediately behave as physics objects. At this point, a collision or explosion force will send the character flying with its limbs thrown in a convincing way.

衝突アクションマトリックス

2 つのオブジェクトが衝突するとき、さまざまなスクリプトイベントは衝突するオブジェクトの Rigidbody の設定に応じて発生します。下の表は、どのイベント関数が呼び出されるかをオブジェクトにアタッチされているコンポーネントに基づいて詳細にまとめたものです。組み合わせのいくつかは 2 つのオブジェクトのうち片方にしか影響しませんが、一般的なルールとして物理演算は Rigidbody コンポーネントがアタッチされていないオブジェクトには適用されません。

衝突時に衝突検出が起こり、メッセージが送信されます
静的コライダー Rigidbody コライダー キネマティック Rigidbody コライダー 静的 トリガーコライダー Rigidbody トリガーコライダー キネマティック Rigidbody トリガーコライダー
静的コライダー   サポート        
Rigidbody コライダー サポート サポート サポート      
キネマティック Rigidbody コライダー   サポート        
静的 トリガーコライダー            
Rigidbody トリガーコライダー            
キネマティック Rigidbody トリガーコライダー            
トリガーメッセージが衝突時に送信されます
静的コライダー Rigidbody コライダー キネマティック Rigidbody コライダー 静的 トリガーコライダー Rigidbody トリガーコライダー キネマティック Rigidbody トリガーコライダー
静的コライダー         サポート サポート
Rigidbody コライダー       サポート サポート サポート
キネマティック Rigidbody コライダー       サポート サポート サポート
静的 トリガーコライダー   サポート サポート   サポート サポート
Rigidbody トリガーコライダー サポート サポート サポート サポート サポート サポート
キネマティック Rigidbody トリガーコライダー サポート サポート サポート サポート サポート サポート
リジッドボディ概要
ジョイント
Copyright © 2020 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961