This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
コリジョンコンポーネント(collision component)のコリジョン形状(collision shape)には、複数のプリミティブ形状か、1つの複雑な形状を使用できます。
プリミティブ形状(primitive shape)には、 ボックス(box) 、 球(sphere) 、 カプセル(capsule) があります。衝突判定や物理特性を持つコンポーネントであるコリジョンオブジェクト(collision object)を 右クリック し、Add Shape を選択すると、プリミティブ形状を追加できます。

ボックスには位置、回転、寸法(幅、高さ、奥行き)があります。

球には位置、回転、直径があります。

カプセルには位置、回転、直径、高さがあります。

カプセル形状は、3D 物理を使用する場合にのみサポートされます(game.project ファイルの Physics セクションで設定します)。
複雑な形状は、タイルマップ(tilemap)コンポーネントか、凸包形状(convex hull shape)から作成できます。
Defold には、タイルマップで使用するタイルソース(tile source)の物理形状を簡単に生成する機能があります。タイルソースのマニュアルでは、タイルソースにコリジョングループ(collision group)を追加し、タイルをコリジョングループに割り当てる方法を説明しています(例)。
タイルマップに衝突判定を追加するには、次の手順に従います。

コリジョングループはタイルマップのタイルソースで定義されるため、ここでは Group プロパティを 使用しません。
Defold には、3つ以上の点から凸包形状を作成する機能があります。
.convexshape)を作成します。凸包のファイル形式は、ほかのすべての Defold ファイルと同じデータ形式である protobuf テキスト形式を使用します。凸包形状では、凸包の点を定義します。2D 物理では、点を反時計回りの順序で指定することをお勧めします。3D 物理モードでは、抽象的な点群を使用します。2D の例を示します。
shape_type: TYPE_HULL
data: 200.000
data: 100.000
data: 0.0
data: 400.000
data: 100.000
data: 0.0
data: 400.000
data: 300.000
data: 0.0
data: 200.000
data: 300.000
data: 0.0
上の例では、長方形の4つの角を定義しています。
200x300 400x300
4---------3
| |
| |
| |
| |
1---------2
200x100 400x100
コリジョン形状の作成に使用できる外部ツールはいくつかあります。
コリジョンオブジェクトとその形状は、ゲームオブジェクトのスケールを継承します。この動作を無効にするには、game.project の Physics セクションで Allow Dynamic Transforms チェックボックスをオフにします。均等な拡大縮小のみがサポートされ、スケールが均等でない場合は、最も小さいスケール値が使用されます。
コリジョンオブジェクトの形状は、physics.set_shape() を使用して実行時にサイズを変更できます。例を示します。
-- set capsule shape data
local capsule_data = {
type = physics.SHAPE_TYPE_CAPSULE,
diameter = 10,
height = 20,
}
physics.set_shape("#collisionobject", "my_capsule_shape", capsule_data)
-- set sphere shape data
local sphere_data = {
type = physics.SHAPE_TYPE_SPHERE,
diameter = 10,
}
physics.set_shape("#collisionobject", "my_sphere_shape", sphere_data)
-- set box shape data
local box_data = {
type = physics.SHAPE_TYPE_BOX,
dimensions = vmath.vector3(10, 10, 5),
}
physics.set_shape("#collisionobject", "my_box_shape", box_data)
指定した ID を持つ正しい種類の形状が、コリジョンオブジェクトにすでに存在している必要があります。
3D 物理のコリジョン形状は、すべての軸を中心に回転できます。
2D 物理のコリジョン形状は、z 軸を中心にのみ回転できます。x 軸または y 軸を中心に回転すると誤った結果になるため、避けてください。形状を x 軸または y 軸に沿って実質的に反転させるために180度回転する場合も同様です。物理形状を反転するには、physics.set_hlip(url, flip) と physics.set_vlip(url, flip) の使用をお勧めします。
物理のデバッグを有効にすると、実行時にコリジョン形状を確認できます。