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.
Checking the stable version of the documentation...
콜리전 모양 (2D)
이 가이드에서는 설명합니다:
Godot에서 2D로 사용할 수 있는 충돌 모양 유형.
폴리곤으로 변환된 이미지를 충돌 형태로 사용합니다.
Godot에서 C#의 퍼포먼스
Godot는 성능과 정확도가 서로 다른 여러 종류의 충돌 형태를 제공합니다.
모양을 지정하는 가장 일반적인 방법은 오브젝트의 자식으로 CollisionShape2D또는 CollisionPolygon2D를 추가하는 것입니다. 이러한 노드들은 편집기 작업 공간에서 직접 모양을 그릴 수 있도록 합니다.
참고
단일 PhysicsBody2D에 여러 개의 충돌 모양을 추가하면 겹치는 것에 대해 걱정할 필요가 없습니다. 그들은 서로 "충돌"하지 않습니다.
프리미티브 콜리전 모양
Godot는 다음 프리미티브 콜리전 모양 유형을 지원합니다:
CSGSphere
SeparationRayShape2D (캐릭터용으로 디자인됨)
:ref:`class_WorldBoundaryShape2D`(무한 비행기)
하나 이상의 기본 모양을 사용하여 가장 작은 개체의 충돌을 나타낼 수 있습니다. 그러나 대형 선박이나 전체 레벨과 같은 보다 복잡한 개체의 경우 대신 볼록하거나 오목한 모양이 필요할 수 있습니다. 자세한 내용은 아래를 참조하세요.
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정확한 충돌이 없습니다. 그들은 그것을 숨기거나 일반적인 게임 플레이 중에 눈에 띄지 않게 만드는 창의적인 방법을 찾습니다.