強火で進め

このブログではプログラム関連の記事を中心に書いてます。

【Unity】 Composite Collider 2D

動作検証環境

  • Unity 2022.2.0f1

はじめに

Composite Collider 2D は複数の Collider 2D を一括で制御する事ができるコンポーネントです。 使用可能な Collider 2D は Box Collider 2DPolygon Collider 2D だけです。

docs.unity3d.com

プロパティ

プロパティ名 説明
Density 密度の設定。 Rigidbody 2D の Use Auto Mass がチェックされている場合にのみ表示される。
Material 物理特性を設定した Physics Material 2D を指定。
Is Trigger チェックされていない時は物理エンジンによる衝突が発生し、衝突時には OnCollisionXXX2D 系のコールバックが発生する。チェックされている時、物理エンジンによる衝突を起こさず、衝突時には OnTriggerXXX2D 系のコールバックを発生させる。
Used by Effector チェックされている場合には Effector を使用する。 Effector 2D 系のコンポーネントを付けておく必要が有る。
Offset 中心位置をずらしたい場合に数値を設定。
Geometry Type Outlines 、Polygons が選択可能。 Outlines を選択した場合には Composite Collider 2D 同士は衝突しませんが Polygons の場合には衝突が発生します。
Generation Type 構成されている Collider に変更された時に新しいジオメトリを作成するタイミングを指定。 Synchronous の場合には即座に行われ、Manual の場合は CompositeCollider2D.GenerateGeometry API を実行したタイミング、または Inspector の Regenerate Collider ボタンを押したタイミングで行われる。
Vertex Distance この数値より近い頂点はすべて削除されます。数値が大きくなるほど見た目に比べて省略された Collider となる。
Offset Distance この距離値内の頂点は結合されます。
Edge Radius Collider のエッジ部分の太さを半径で指定します。Geometry Type で Outlines が選択されている時の表示される。

Layer Overrides の項目についてはこちらの記事を参照。

解説

Vertex Distance

この様なスプライトの場合で検証してみます。

■ Vertex Distance = 0.0005 の時

■ Vertex Distance = 0.26 の時

数字が大きい方が簡略化された Collider になっている事が確認できます。

Offset Distance

■ Offset Distance = 5e-05 の時

■ Offset Distance = 0.3 の時

数字が大きい方が頂点が統合された Collider になっている事が確認できます。

Edge Radius

■ Edge Radius = 0.15 の時

Physics2D.OverlapPoint で判定されるのはこのエッジの部分だけです。内部の座標で Physics2D.OverlapPoint を実行した場合には Collider が返される事は有りません。

使い方

Composite Collider 2D を付けた GameObject の下に使用したい Collider という階層構造にします。

なお、 Composite Collider 2D を付けた GameObject には Rigidbody 2D も付けておく必要が有ります。

Box Collider 2D や Polygon Collider 2D で Used By Composite にチェックを付けると Composite Collider 2D で管理されようになります。

Composite Collider 2D を付けた GameObject を選択すると現在の衝突範囲が視覚化されます。

これを参考にしながら自分のゲームで許容できる正確さと負荷のバランスを取りながら、値の調整を行います。