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

충돌 모양

충돌 오브젝트는 여러 내장 모양을 포함할 수 있습니다. 3D 물리에서는 glTF 또는 GLB 파일의 hull과 삼각형 메쉬를 포함할 수 있습니다. 충돌 오브젝트의 Collision Shape 프로퍼티로 타일맵이나 convex shape 리소스를 사용할 수도 있습니다.

기본 모양

기본 모양은 box, sphere, capsule입니다. 충돌 오브젝트를 오른쪽 클릭하고 Add Shape를 선택하여 기본 모양을 추가합니다:

기본 모양 추가

Box 모양

box에는 위치, 회전, 크기(너비, 높이, 깊이)가 있습니다:

Box 모양

Sphere 모양

sphere에는 위치, 회전, 지름이 있습니다:

Sphere 모양

Capsule 모양

capsule에는 위치, 회전, 지름, 높이가 있습니다:

Sphere 모양

Capsule 모양은 3D 물리를 사용할 때만 지원됩니다. 3D 물리는 game.project 파일의 Physics 섹션에서 설정합니다.

복잡한 모양

복잡한 모양에는 타일맵 지오메트리나 convex hull 데이터를 사용할 수 있습니다. Defold 1.13.2부터 3D 충돌 오브젝트에서는 glTF 또는 GLB 씬의 메쉬로 hull과 삼각형 메쉬 모양을 만들 수도 있습니다.

3D의 Hull 및 Mesh 모양

메쉬를 볼록한 형태로 근사하려면 Hull 모양을 사용합니다. 레벨 지오메트리의 구멍 같은 오목한 영역을 포함하여 메쉬의 삼각형을 따라 충돌해야 한다면 Mesh 모양을 사용합니다.

  1. game.project에서 Physics → Type3D로 설정합니다.
  2. Outline에서 충돌 오브젝트를 오른쪽 클릭하고 Add Shape ▸ Hull 또는 Add Shape ▸ Mesh를 선택합니다.
  3. 새 모양을 선택하고 Scene 프로퍼티를 .gltf 또는 .glb 파일로 설정합니다.
  4. Mesh 필드에서 이름 있는 메쉬를 선택합니다. 목록에 없다면 모델링 도구에서 메쉬에 이름을 지정하고 씬을 다시 익스포트하세요.
  5. 모양의 위치와 회전을 조정하여 게임 오브젝트의 보이는 지오메트리에 맞춥니다. 모양을 더 추가해야 한다면 이 단계를 반복합니다.

선택한 메쉬는 로컬 지오메트리를 제공하며 glTF 노드 트랜스폼은 적용되지 않습니다. Mesh 충돌 모양은 정적 및 비정적 충돌 오브젝트를 포함하여 Bullet 3D 백엔드에서 지원됩니다. 2D 물리 백엔드에서는 지원되지 않습니다.

삼각형 메쉬 지오메트리는 런타임 모양 API를 통해 읽기만 할 수 있습니다. 삼각형을 변경하려면 소스 메쉬를 편집하고 다시 빌드하세요. 게임 오브젝트의 스케일은 충돌 모양 스케일링을 참고하세요.

타일맵 충돌 모양

Defold에는 타일 맵에서 사용하는 타일 소스에 대한 물리 모형을 쉽게 생성할 수 있는 기능이 있습니다. Tilesource 매뉴얼에서는 타일 소스에 충돌 그룹을 추가하고 타일을 충돌 그룹에 할당하는 방법을 설명합니다(예제).

타일 맵에 충돌을 추가하려면:

  1. 게임 오브젝트를 오른쪽 클릭하고 Add Component File을 선택하여 게임 오브젝트에 타일맵을 추가합니다. 타일 맵 파일을 선택합니다.
  2. 게임 오브젝트를 오른쪽 클릭하고 Add Component ▸ Collision Object를 선택하여 게임 오브젝트에 충돌 오브젝트 컴포넌트를 추가합니다.
  3. 컴포넌트에 모양을 추가하는 대신 Collision Shape 프로퍼티를 tilemap 파일로 설정합니다.
  4. 평소처럼 충돌 오브젝트 컴포넌트의 Properties를 설정합니다.

Tilesource 충돌

충돌 그룹이 타일 맵의 타일 소스에 정의되므로 여기서는 Group 프로퍼티가 사용되지 않는다는 점에 유의하세요.

Convex hull 모양

3D 물리에서는 위의 에디터 작업 절차를 사용하여 메쉬에서 직접 hull을 만들 수 있습니다. 기존 .convexshape 리소스도 지원되며, 외부 에디터를 사용해 점으로부터 생성할 수 있습니다:

  1. 외부 에디터를 사용해 convex hull shape 파일(파일 확장자 .convexshape)을 생성합니다.
  2. 텍스트 에디터 또는 외부 도구로 파일을 직접 편집합니다(아래 참조).
  3. 충돌 오브젝트 컴포넌트에 모양을 추가하는 대신 Collision Shape 프로퍼티를 convex shape 파일로 설정합니다.

파일 포멧

convex hull 파일 포멧은 다른 모든 Defold 파일과 동일한 데이터 포멧, 즉 protobuf text format을 사용합니다. convex hull 모양은 hull의 점들을 정의합니다. 2D 물리에서는 점을 반시계 방향 순서로 제공해야 합니다. 3D 물리 모드에서는 추상적인 point cloud가 사용됩니다. 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

위 예제는 사각형의 네 모서리를 정의합니다:

 200x300   400x300
    4---------3
    |         |
    |         |
    |         |
    |         |
    1---------2
 200x100   400x100

외부 도구

충돌 모양을 만드는 데 사용할 수 있는 다양한 외부 도구가 있습니다:

  • CodeAndWeb의 Physics Editor는 스프라이트와 이에 맞는 충돌 모양이 있는 게임 오브젝트를 만드는 데 사용할 수 있습니다.
  • Defold Polygon Editor는 convex hull 모양을 만드는 데 사용할 수 있습니다.
  • Physics Body Editor는 convex hull 모양을 만드는 데 사용할 수 있습니다.

충돌 모양 스케일링

충돌 오브젝트와 그 모양은 게임 오브젝트의 스케일을 상속합니다. 이 동작을 비활성화하려면 game.project의 Physics 섹션에서 Allow Dynamic Transforms 체크박스를 해제합니다. 균일 스케일링만 지원되며, 스케일이 균일하지 않으면 가장 작은 스케일 값이 사용된다는 점에 유의하세요.

충돌 모양 크기 변경

기본 모양은 런타임에 physics.set_shape()를 사용해 크기를 변경할 수 있습니다. 이 함수는 hull 버텍스나 삼각형 메쉬 지오메트리를 대체하지 않습니다. 예:

-- capsule shape 데이터 설정
local capsule_data = {
  type = physics.SHAPE_TYPE_CAPSULE,
  diameter = 10,
  height = 20,
}
physics.set_shape("#collisionobject", "my_capsule_shape", capsule_data)

-- sphere shape 데이터 설정
local sphere_data = {
  type = physics.SHAPE_TYPE_SPHERE,
  diameter = 10,
}
physics.set_shape("#collisionobject", "my_sphere_shape", sphere_data)

-- box shape 데이터 설정
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)을 사용하는 것이 권장됩니다.

디버깅

런타임에 충돌 모양을 보려면 물리 디버깅을 활성화할 수 있습니다.