Manuals
Manuals




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)を追加し、タイルをコリジョングループに割り当てる方法を説明しています()。

タイルマップに衝突判定を追加するには、次の手順に従います。

  1. ゲームオブジェクト(game object)を 右クリック し、Add Component File を選択して、ゲームオブジェクトにタイルマップを追加します。タイルマップファイルを選択します。
  2. ゲームオブジェクトを 右クリック し、Add Component ▸ Collision Object を選択して、ゲームオブジェクトにコリジョンオブジェクトコンポーネントを追加します。
  3. コンポーネントに形状を追加する代わりに、Collision Shape プロパティに tilemap ファイルを設定します。
  4. コリジョンオブジェクトコンポーネントの Properties を通常どおり設定します。

タイルソースの衝突判定

コリジョングループはタイルマップのタイルソースで定義されるため、ここでは Group プロパティを 使用しません

凸包形状

Defold には、3つ以上の点から凸包形状を作成する機能があります。

  1. 外部エディターを使用して、凸包形状ファイル(拡張子 .convexshape)を作成します。
  2. テキストエディターまたは外部ツール(下記参照)を使用して、ファイルを手動で編集します。
  3. コリジョンオブジェクトコンポーネントに形状を追加する代わりに、Collision Shape プロパティに 凸形状 ファイルを設定します。

ファイル形式

凸包のファイル形式は、ほかのすべての 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

外部ツール

コリジョン形状の作成に使用できる外部ツールはいくつかあります。

  • CodeAndWeb の Physics Editor は、スプライト(sprite)とそれに合ったコリジョン形状を持つゲームオブジェクトの作成に使用できます。
  • Defold Polygon Editor は、凸包形状の作成に使用できます。
  • Physics Body Editor は、凸包形状の作成に使用できます。

コリジョン形状の拡大縮小

コリジョンオブジェクトとその形状は、ゲームオブジェクトのスケールを継承します。この動作を無効にするには、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 物理でのコリジョン形状の回転

3D 物理のコリジョン形状は、すべての軸を中心に回転できます。

2D 物理でのコリジョン形状の回転

2D 物理のコリジョン形状は、z 軸を中心にのみ回転できます。x 軸または y 軸を中心に回転すると誤った結果になるため、避けてください。形状を x 軸または y 軸に沿って実質的に反転させるために180度回転する場合も同様です。物理形状を反転するには、physics.set_hlip(url, flip)physics.set_vlip(url, flip) の使用をお勧めします。

デバッグ

物理のデバッグを有効にすると、実行時にコリジョン形状を確認できます。