충돌 오브젝트
충돌 오브젝트는 게임 오브젝트에 물리 동작을 부여하는 데 사용하는 컴포넌트입니다. 충돌 오브젝트에는 무게, 반발력, 마찰 같은 물리 프로퍼티가 있으며, 공간상의 범위는 컴포넌트에 첨부하는 하나 이상의 _모양_으로 정의됩니다. Defold는 다음과 같은 충돌 오브젝트 타입을 지원합니다:
- 정적 오브젝트
- 정적 오브젝트는 절대 움직이지 않지만, 정적 오브젝트와 충돌하는 동적 오브젝트는 튕기거나 미끄러지는 방식으로 반응합니다. 정적 오브젝트는 움직이지 않는 레벨 지오메트리(예: 바닥과 벽)를 만드는 데 매우 유용합니다. 또한 성능 면에서 동적 오브젝트보다 비용이 낮습니다. 정적 오브젝트는 이동하거나 다른 방식으로 변경할 수 없습니다.
- 동적 오브젝트
- 동적 오브젝트는 물리 엔진이 시뮬레이션합니다. 엔진은 모든 충돌을 해결하고 그 결과로 생기는 힘을 적용합니다. 동적 오브젝트는 사실적으로 동작해야 하는 오브젝트에 적합합니다. 동적 오브젝트에 영향을 주는 가장 일반적인 방법은 힘을 적용하거나 각 감쇠 및 속도, 선형 감쇠 및 속도를 변경하는 식으로 간접적으로 조작하는 것입니다. game.project에서 Allow Dynamic Transforms 설정이 활성화되어 있으면 동적 오브젝트의 위치와 방향을 직접 조작할 수도 있습니다.
- 키네마틱 오브젝트
- 키네마틱 오브젝트는 다른 물리 오브젝트와의 충돌을 등록하지만, 물리 엔진은 자동 시뮬레이션을 수행하지 않습니다. 충돌을 해결하거나 무시하는 작업은 사용자에게 맡겨져 있습니다(자세히 알아보기). 키네마틱 오브젝트는 플레이어 캐릭터처럼 물리 반응을 세밀하게 제어해야 하는 플레이어 또는 스크립트 제어 오브젝트에 매우 적합합니다.
- 트리거
- 트리거는 단순 충돌을 등록하는 오브젝트입니다. 트리거는 가벼운 충돌 오브젝트입니다. 트리거는 물리 월드와 상호작용하는 대신 읽는다는 점에서 레이 캐스트와 비슷합니다. 총알처럼 단순히 맞았음을 등록해야 하는 오브젝트나, 오브젝트가 특정 지점에 도달했을 때 특정 동작을 트리거하려는 게임 로직의 일부에 적합합니다. 트리거는 키네마틱 오브젝트보다 계산 비용이 낮으며, 가능하다면 키네마틱 오브젝트 대신 사용하는 것이 좋습니다.
충돌 오브젝트 컴포넌트 추가하기
충돌 오브젝트 컴포넌트에는 타입과 물리 프로퍼티를 설정하는 Properties 집합이 있습니다. 또한 물리 오브젝트의 전체 모양을 정의하는 하나 이상의 Shapes가 포함됩니다.
게임 오브젝트에 충돌 오브젝트 컴포넌트를 추가하려면:
- Outline 뷰에서 게임 오브젝트를 오른쪽 클릭하고 컨텍스트 메뉴에서 Add Component ▸ Collision Object를 선택합니다. 이렇게 하면 모양이 없는 새 컴포넌트가 만들어집니다.
- 새 컴포넌트를 오른쪽 클릭하고 Add Shape ▸ Box / Capsule / Sphere를 선택합니다. 그러면 충돌 오브젝트 컴포넌트에 새 모양이 추가됩니다. 컴포넌트에는 원하는 수만큼 모양을 추가할 수 있습니다. 타일 맵이나 convex hull을 사용해 물리 오브젝트의 모양을 정의할 수도 있습니다.
- 이동, 회전, 스케일 도구를 사용해 모양을 편집합니다.
- Outline에서 컴포넌트를 선택하고 충돌 오브젝트의 Properties를 편집합니다.

충돌 모양 추가하기
충돌 오브젝트 컴포넌트는 여러 기본 모양을 사용하거나 하나의 복잡한 모양을 사용할 수 있습니다. 다양한 모양과 충돌 오브젝트 컴포넌트에 모양을 추가하는 방법은 충돌 모양 매뉴얼에서 자세히 알아볼 수 있습니다.
충돌 오브젝트 프로퍼티
- Id
- 컴포넌트의 식별자입니다.
- Collision Shape
- 이 프로퍼티는 타일 맵 지오메트리나 기본 모양을 사용하지 않는 convex shape에 사용됩니다. 충돌 모양에 대한 자세한 정보를 참고하세요.
- Type
- 충돌 오브젝트의 타입입니다:
Dynamic, Kinematic, Static 또는 Trigger. 오브젝트를 Dynamic으로 설정하면 Mass 프로퍼티를 0이 아닌 값으로 설정해야 합니다. Dynamic 또는 Static 오브젝트의 경우 Friction 및 Restitution 값이 사용 사례에 적합한지도 확인해야 합니다.
- Friction
- 마찰은 오브젝트가 서로 맞닿아 사실적으로 미끄러질 수 있게 합니다. 마찰값은 보통
0(마찰 없음—매우 미끄러운 오브젝트)과 1(강한 마찰—거친 오브젝트) 사이로 설정합니다. 하지만 양수라면 어떤 값이든 유효합니다.
마찰 강도는 수직항력에 비례합니다(이를 쿨롱 마찰이라고 합니다). 두 모양(A와 B) 사이의 마찰력이 계산될 때, 두 오브젝트의 마찰값은 기하 평균으로 결합됩니다:
F = sqrt( F_A * F_B )
즉, 오브젝트 중 하나의 마찰이 0이면 두 오브젝트 사이의 접촉도 마찰이 0이 됩니다.
- Restitution
- 반발력 값은 오브젝트의 “튕김 정도”를 설정합니다. 값은 보통 0(비탄성 충돌—오브젝트가 전혀 튀지 않음)과 1(완전 탄성 충돌—오브젝트의 속도가 튕김에서 정확히 반사됨) 사이입니다.
두 모양(A와 B) 사이의 반발력 값은 다음 공식을 사용해 결합됩니다:
R = max( R_A, R_B )
하나의 모양에 여러 접촉이 생기면 Box2D가 반복 solver를 사용하므로 반발력은 근사적으로 시뮬레이션됩니다. 또한 Box2D는 충돌 속도가 작을 때 튕김 지터를 방지하기 위해 비탄성 충돌을 사용합니다.
- Linear damping
- 선형 감쇠는 바디의 선형 속도를 줄입니다. 이는 접촉 중에만 발생하는 마찰과 다르며, 오브젝트가 공기보다 더 두꺼운 무언가를 통과해 움직이는 것처럼 떠 있는 느낌을 주는 데 사용할 수 있습니다. 유효한 값은 0과 1 사이입니다.
Box2D는 안정성과 성능을 위해 감쇠를 근사합니다. 작은 값에서는 감쇠 효과가 타임스텝과 무관하지만, 큰 감쇠 값에서는 감쇠 효과가 타임스텝에 따라 달라집니다. 게임을 고정 타임스텝으로 실행한다면 이는 문제가 되지 않습니다.
- Angular damping
- 각 감쇠는 선형 감쇠와 비슷하게 동작하지만 바디의 각속도를 줄입니다. 유효한 값은 0과 1 사이입니다.
- Locked rotation
- 이 프로퍼티를 설정하면 충돌 오브젝트에 어떤 힘이 가해지더라도 회전이 완전히 비활성화됩니다.
- Bullet
- 이 프로퍼티를 설정하면 충돌 오브젝트와 다른 동적 충돌 오브젝트 사이의 연속 충돌 감지(CCD)가 활성화됩니다. Type이
Dynamic으로 설정되어 있지 않으면 Bullet 프로퍼티는 무시됩니다.
- Group
- 오브젝트가 속해야 하는 충돌 그룹의 이름입니다. 서로 다른 그룹을 16개까지 만들 수 있으며, 게임에 맞게 원하는 이름을 지정할 수 있습니다. 예를 들어 “players”, “bullets”, “enemies”, “world” 같은 이름을 사용할 수 있습니다. Collision Shape가 타일 맵으로 설정되어 있으면 이 필드는 사용되지 않고, 그룹 이름은 타일 소스에서 가져옵니다. 충돌 그룹에 대해 더 알아보세요.
- Mask
- 이 오브젝트가 충돌해야 하는 다른 _그룹_입니다. 하나의 그룹 이름을 지정하거나 쉼표로 구분된 목록으로 여러 그룹을 지정할 수 있습니다. 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 레퍼런스.