コリジョンオブジェクト
コリジョンオブジェクト(collision object)は、ゲームオブジェクト(game object)に物理的な挙動を与えるためのコンポーネント(component)です。コリジョンオブジェクトには重さ、反発係数、摩擦などの物理特性があり、空間内で占める範囲はコンポーネントに追加する1つ以上の 形状 によって定義されます。Defold は、次の種類のコリジョンオブジェクトをサポートしています。
- 静的オブジェクト
- 静的オブジェクト(static object)は動きませんが、静的オブジェクトに衝突した動的オブジェクトは、跳ね返ったり滑ったりします。静的オブジェクトは、動かないレベルの地形(地面や壁など)を構築する際に非常に便利です。また、動的オブジェクトよりも処理負荷が低くなります。静的オブジェクトを移動したり、その他の変更を加えたりすることはできません。
- 動的オブジェクト
- 動的オブジェクト(dynamic object)は、物理エンジンによってシミュレーションされます。エンジンはすべての衝突を解決し、その結果生じる力を適用します。動的オブジェクトは、現実的な挙動が必要なオブジェクトに適しています。動的オブジェクトに影響を与える最も一般的な方法は、力を適用する、角方向の減衰と速度、直線方向の減衰と速度を変更するなど、間接的に操作する方法です。game.project で Allow Dynamic Transforms 設定が有効な場合は、動的オブジェクトの位置や向きを直接操作することもできます。
- キネマティックオブジェクト
- キネマティックオブジェクト(kinematic object)は、他の物理オブジェクトとの衝突を検出しますが、物理エンジンは自動的なシミュレーションを行いません。衝突を解決するか無視するかは、自分で処理する必要があります(詳細はこちら)。キネマティックオブジェクトは、プレイヤーキャラクターのように、プレイヤーやスクリプトで制御し、物理的な反応を細かく制御する必要があるオブジェクトに非常に適しています。
- トリガー
- トリガー(trigger)は、単純な衝突を検出するオブジェクトです。トリガーは処理負荷の低いコリジョンオブジェクトです。物理ワールドと相互作用せず、その情報を読み取るという点で、レイキャスト(ray cast)に似ています。ヒットを検出するだけのオブジェクト(弾丸など)や、オブジェクトが特定の地点に到達したときに所定のアクションを実行するゲームロジックの一部に適しています。トリガーはキネマティックオブジェクトよりも計算負荷が低いため、可能であればキネマティックオブジェクトよりも優先して使うことをお勧めします。
コリジョンオブジェクトコンポーネントの追加
コリジョンオブジェクトコンポーネントには、種類と物理特性を設定する Properties があります。また、物理オブジェクト全体の形状を定義する1つ以上の 形状 を含みます。
ゲームオブジェクトにコリジョンオブジェクトコンポーネントを追加するには、次の手順を実行します。
- Outline ビューでゲームオブジェクトを 右クリック し、コンテキストメニューから Add Component ▸ Collision Object を選択します。形状のない新しいコンポーネントが作成されます。
- 新しいコンポーネントを 右クリック し、Add Shape ▸ Box / Capsule / Sphere を選択します。これにより、コリジョンオブジェクトコンポーネントに新しい形状が追加されます。コンポーネントには任意の数の形状を追加できます。また、タイルマップ(tile map)や凸包(convex hull)を使って物理オブジェクトの形状を定義することもできます。
- 移動、回転、スケールのツールを使って形状を編集します。
- Outline でコンポーネントを選択し、コリジョンオブジェクトの Properties を編集します。

コリジョン形状の追加
コリジョンコンポーネントには、複数のプリミティブ形状または1つの複雑な形状を使用できます。各種のコリジョン形状(collision shape)と、それらをコリジョンコンポーネントに追加する方法については、コリジョン形状のマニュアルを参照してください。
コリジョンオブジェクトのプロパティ
- Id
- コンポーネントの識別子です。
- Collision Shape
- このプロパティは、プリミティブ形状を使用しないタイルマップの地形や凸形状に使用します。詳しくは、コリジョン形状を参照してください。
- Type
- コリジョンオブジェクトの種類です。
Dynamic、Kinematic、Static、Trigger のいずれかです。オブジェクトを Dynamic に設定する場合は、Mass プロパティをゼロ以外の値に設定する 必要があります。Dynamic または Static オブジェクトの場合は、Friction と Restitution の値が用途に適していることも確認することをお勧めします。
- Friction
- 摩擦によって、オブジェクト同士が現実的に滑り合うようになります。摩擦の値は通常、
0(摩擦がまったくない、非常に滑りやすいオブジェクト)から 1(摩擦が強い、表面が粗いオブジェクト)の間に設定します。ただし、正の値であればどの値も有効です。
摩擦の強さは垂直抗力に比例します(これをクーロン摩擦と呼びます)。2つの形状(A と B)の間の摩擦力を計算するときは、両オブジェクトの摩擦の値を幾何平均で組み合わせます。
F = sqrt( F_A * F_B )
つまり、一方のオブジェクトの摩擦がゼロであれば、両者の接触による摩擦もゼロになります。
- Restitution
- 反発係数の値は、オブジェクトの「跳ね返りやすさ」を設定します。値は通常、0(非弾性衝突で、オブジェクトはまったく跳ね返りません)から1(完全弾性衝突で、オブジェクトの速度が正確に反射したものが跳ね返りの速度になります)の間です。
2つの形状(A と B)の反発係数は、次の式で組み合わせます。
R = max( R_A, R_B )
1つの形状に複数の接触が生じた場合、Box2D は反復ソルバーを使用するため、反発は近似的にシミュレーションされます。また、Box2D は衝突速度が小さい場合に非弾性衝突を使用し、跳ね返りによる細かな振動を防ぎます。
- Linear damping
- 直線方向の減衰は、物体の直線速度を低下させます。接触時にのみ生じる摩擦とは異なり、空気よりも粘りのある物質の中を移動しているような、浮遊感のある動きをオブジェクトに与えるために使用できます。有効な値は0から1の間です。
Box2D は、安定性と性能のために減衰を近似します。値が小さい場合、減衰の効果はタイムステップに依存しませんが、減衰の値が大きい場合は、減衰の効果がタイムステップによって変わります。固定タイムステップでゲームを実行する場合、これが問題になることはありません。
- Angular damping
- 角方向の減衰は直線方向の減衰と同様に働きますが、物体の角速度を低下させます。有効な値は0から1の間です。
- Locked rotation
- このプロパティを設定すると、どのような力を加えてもコリジョンオブジェクトが回転しないよう、回転が完全に無効になります。
- Bullet
- このプロパティを設定すると、このコリジョンオブジェクトと他の動的コリジョンオブジェクトの間で、連続衝突判定(CCD)が有効になります。Type が
Dynamic に設定されていない場合、Bullet プロパティは無視されます。
- Group
- オブジェクトが所属するコリジョングループ(collision group)の名前です。16種類のグループを使用でき、ゲームに合わせて自由に名前を付けられます。たとえば、
players、bullets、enemies、world などです。Collision Shape がタイルマップに設定されている場合、このフィールドは使用されず、グループ名はタイルソース(tile source)から取得されます。コリジョングループの詳細はこちら。
- Mask
- このオブジェクトが衝突する他の グループ です。1つのグループ名を指定するか、複数のグループをカンマ区切りのリストで指定できます。Mask フィールドを空にすると、このオブジェクトは何とも衝突しません。コリジョングループの詳細はこちら。
- Generate Collision Events
- 有効にすると、このオブジェクトが衝突イベントを送信できるようになります。
- Generate Contact Events
- 有効にすると、このオブジェクトが接触イベントを送信できるようになります。
- Generate Trigger Events
- 有効にすると、このオブジェクトがトリガーイベントを送信できるようになります。
実行時のプロパティ
物理オブジェクトには、go.get() と go.set() を使って読み取りや変更ができるさまざまなプロパティがあります。
angular_damping
- コリジョンオブジェクトコンポーネントの角方向の減衰値です(
number)。API リファレンス。
angular_velocity
- コリジョンオブジェクトコンポーネントの現在の角速度です(
vector3)。API リファレンス。
linear_damping
- コリジョンオブジェクトの直線方向の減衰値です(
number)。API リファレンス。
linear_velocity
- コリジョンオブジェクトコンポーネントの現在の直線速度です(
vector3)。API リファレンス。
mass
- コリジョンオブジェクトコンポーネントに定義された物理的な質量です。読み取り専用です(
number)。API リファレンス。