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 object)には、複数の埋め込み形状を含められます。3D 物理では、glTF または GLB ファイルの凸包や三角形メッシュも含められます。また、コリジョンオブジェクトの Collision Shape プロパティを通じて、タイルマップや凸形状のリソースを使用できます。
プリミティブ形状(primitive shape)には、 ボックス(box) 、 球(sphere) 、 カプセル(capsule) があります。衝突判定や物理特性を持つコンポーネントであるコリジョンオブジェクト(collision object)を 右クリック し、Add Shape を選択すると、プリミティブ形状を追加できます。

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

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

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

カプセル形状は、3D 物理を使用する場合にのみサポートされます(game.project ファイルの Physics セクションで設定します)。
複雑な形状には、タイルマップ(tilemap)のジオメトリや凸包(convex hull)のデータを使えます。Defold 1.13.2 以降では、3D コリジョンオブジェクトで、glTF または GLB シーンのメッシュから凸包や三角形メッシュの形状を作成することもできます。
メッシュを凸形状で近似するには Hull 形状を使います。レベルのジオメトリの開口部などの凹領域を含め、メッシュの三角形に沿った衝突判定が必要な場合は Mesh 形状を使います。
3D に設定します。選択したメッシュはローカルジオメトリを提供し、glTF ノードのトランスフォームは適用されません。Mesh コリジョン形状は、静的および非静的なコリジョンオブジェクトを含め、Bullet 3D バックエンドでサポートされています。2D 物理バックエンドではサポートされていません。
実行時の形状 API では、三角形メッシュのジオメトリは読み取り専用です。三角形を変更するには元のメッシュを編集し、再ビルドしてください。ゲームオブジェクトのスケールについては、コリジョン形状の拡大縮小を参照してください。
Defold には、タイルマップで使用するタイルソース(tile source)の物理形状を簡単に生成する機能があります。タイルソースのマニュアルでは、タイルソースにコリジョングループ(collision group)を追加し、タイルをコリジョングループに割り当てる方法を説明しています(例)。
タイルマップに衝突判定を追加するには、次の手順に従います。

コリジョングループはタイルマップのタイルソースで定義されるため、ここでは Group プロパティを 使用しません。
3D 物理では、上記のエディターでの手順に従い、メッシュから凸包を直接作成できます。従来の .convexshape リソースもサポートされており、外部エディターを使って点から作成できます。
.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) の使用をお勧めします。
物理のデバッグを有効にすると、実行時にコリジョン形状を確認できます。