Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

콜리전 모양 (2D)

이 가이드에서는 설명합니다:

  • Godot에서 2D로 사용할 수 있는 충돌 모양 유형.

  • 폴리곤으로 변환된 이미지를 충돌 형태로 사용합니다.

  • Godot에서 C#의 퍼포먼스

Godot는 성능과 정확도가 서로 다른 여러 종류의 충돌 형태를 제공합니다.

모양을 지정하는 가장 일반적인 방법은 오브젝트의 자식으로 CollisionShape2D또는 CollisionPolygon2D를 추가하는 것입니다. 이러한 노드들은 편집기 작업 공간에서 직접 모양을 그릴 수 있도록 합니다.

참고

단일 PhysicsBody2D에 여러 개의 충돌 모양을 추가하면 겹치는 것에 대해 걱정할 필요가 없습니다. 그들은 서로 "충돌"하지 않습니다.

프리미티브 콜리전 모양

Godot는 다음 프리미티브 콜리전 모양 유형을 지원합니다:

하나 이상의 기본 모양을 사용하여 가장 작은 개체의 충돌을 나타낼 수 있습니다. 그러나 대형 선박이나 전체 레벨과 같은 보다 복잡한 개체의 경우 대신 볼록하거나 오목한 모양이 필요할 수 있습니다. 자세한 내용은 아래를 참조하세요.

RigidBodies 및 CharacterBodies와 같은 동적 객체의 경우 해당 동작이 가장 안정적이므로 기본 모양을 선호하는 것이 좋습니다. 그들은 종종 더 나은 성능도 제공합니다.

컨벡스 콜리전 모양

경고

Godot는 현재 2D 볼록 충돌 모양을 생성하는 내장된 방법을 제공하지 않습니다. 이 섹션은 주로 참조 목적으로 여기에 있습니다.

:ref:`볼록 충돌 모양 <class_ConvexPolygonShape2D>`은 기본 충돌 모양과 오목 충돌 모양 간의 절충안입니다. 복잡한 모양을 나타낼 수 있지만 중요한 주의 사항이 있습니다. 이름에서 알 수 있듯이 개별 모양은 볼록한 모양만 나타낼 수 있습니다. 예를 들어, 피라미드는 *볼록*이지만 속이 빈 상자는 *오목*입니다. 단일 충돌 모양으로 오목한 개체를 정의하려면 오목한 충돌 모양을 사용해야 합니다.

개체의 복잡성에 따라 오목한 충돌 모양 대신 여러 개의 볼록한 모양을 사용하면 더 나은 성능을 얻을 수 있습니다. Godot를 사용하면 *볼록 분해*를 사용하여 속이 빈 물체와 대략 일치하는 볼록 모양을 생성할 수 있습니다. 이 성능 이점은 특정 양의 볼록한 모양 이후에는 더 이상 적용되지 않습니다. 전체 레벨과 같이 크고 복잡한 개체의 경우 대신 오목한 모양을 사용하는 것이 좋습니다.

오목 또는 삼각메시 콜리전 모양

:ref:`오목 충돌 모양 <class_ConcavePolygonShape2D>`(삼각형 충돌 모양이라고도 함)은 몇 개의 삼각형에서 수천 개의 삼각형에 이르기까지 모든 형태를 취할 수 있습니다. 오목한 모양은 가장 느린 옵션이지만 Godot에서는 가장 정확합니다. StaticBodies 내에서는 오목한 모양만 사용할 수 있습니다. RigidBody의 모드가 Static이 아닌 한 CharacterBodies 또는 RigidBodies에서는 작동하지 않습니다.

참고

오목 모양이 가장 정확한 *충돌*을 제공하더라도 접촉 보고는 기본 모양보다 정확도가 떨어질 수 있습니다.

레벨 디자인에 TileMaps를 사용하지 않는 경우 오목한 모양이 레벨 충돌에 대한 최선의 접근 방식입니다.

인스펙터에서 CollisionPolygon2D 노드의 *빌드 모드*를 구성할 수 있습니다. **Solids**(기본값)로 설정된 경우 충돌에는 다각형과 포함된 영역이 포함됩니다. **세그먼트**로 설정된 경우 충돌에는 다각형 가장자리만 포함됩니다.

Sprite2D를 선택하고 2D 뷰포트 상단에 있는 Sprite2D 메뉴를 사용하여 편집기에서 오목한 충돌 모양을 생성할 수 있습니다. Sprite2D 메뉴 드롭다운에는 **만들기 CollisionPolygon2D Sibling**이라는 옵션이 표시됩니다. 클릭하면 3가지 설정이 포함된 메뉴가 표시됩니다.

  • 단순화: 값이 높을수록 모양이 덜 세밀해지고 정확도는 떨어지지만 성능은 향상됩니다.

  • 축소(픽셀): 값이 높을수록 생성된 충돌 다각형은 스프라이트의 가장자리를 기준으로 축소됩니다.

  • 성장(픽셀): 값이 높을수록 생성된 충돌 다각형은 스프라이트의 가장자리를 기준으로 늘어납니다. Grow 및 Shrink를 동일한 값으로 설정하면 두 값을 모두 0으로 두는 것과 다른 결과가 나올 수 있습니다.

참고

작은 세부 사항이 많은 이미지가 있는 경우 단순화된 버전을 만들고 이를 사용하여 충돌 다각형을 생성하는 것이 좋습니다. 이렇게 하면 플레이어가 작고 장식적인 세부 사항에 의해 방해를 받지 않으므로 성능과 게임 느낌이 향상될 수 있습니다.

충돌 다각형 생성을 위해 별도의 이미지를 사용하려면 다른 Sprite2D를 생성하고 그로부터 충돌 다각형 형제를 생성한 다음 Sprite2D 노드를 제거합니다. 이런 방식으로 생성된 충돌에서 작은 세부사항을 제외할 수 있습니다.

성능

PhysicsBody당 단일 충돌 형태로 제한되지 않습니다. 그럼에도 불구하고 특히 RigidBodies 및 CharacterBodies와 같은 동적 개체의 경우 성능을 향상하려면 모양 수를 가능한 한 낮게 유지하는 것이 좋습니다. 또한 물리 엔진의 내부 최적화를 활용하려면 CollisionShapes를 변환, 회전 또는 크기 조정하지 마십시오.

StaticBody에서 변환되지 않은 단일 충돌 형태를 사용할 때 엔진의 광역 위상 알고리즘은 비활성 PhysicsBodies를 삭제할 수 있습니다. 그러면 *좁은 단계*에서는 활성체의 모양만 고려하면 됩니다. StaticBody에 충돌 모양이 많으면 넓은 단계가 실패합니다. 그런 다음 속도가 느린 좁은 단계에서는 각 모양에 대해 충돌 검사를 수행해야 합니다.

성능 문제가 발생하면 정확성 측면에서 절충해야 할 수도 있습니다. 대부분의 게임에는 100% a정확한 충돌이 없습니다. 그들은 그것을 숨기거나 일반적인 게임 플레이 중에 눈에 띄지 않게 만드는 창의적인 방법을 찾습니다.