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.

Area2D 사용하기

소개

Godot는 콜리전 감지와 반응성을 모두 제공하기 위해 많은 콜리전 오브젝트를 제공합니다. 프로젝트에 사용할 항목을 결정하는 것은 혼란스러울 수 있습니다. 각각의 작동 방식 및 장단점이 무엇인지 이해한다면 문제를 피하고 개발을 간소화할 수 있습니다. 이 튜토리얼에서는 KinematicBody2D 노드를 살펴보고 사용 방법에 대한 몇 가지 예를 보여 드리겠습니다.

참고

이 문서는 당신이 Godot의 다양한 물리 바디에 대해 잘 알고 있다고 가정합니다. 먼저 물리 소개를 읽어주세요.

영역이 무엇입니까?

Area2D는 2D 공간 영역을 정의합니다. 이 공간에서는 다른 CollisionObject2D 노드의 중첩, 진입 및 종료를 감지할 수 있습니다. 영역에서는 로컬 물리 속성을 재정의할 수도 있습니다. 아래에서 이러한 각 기능을 살펴보겠습니다.

노드 속성

영역에는 해당 동작을 사용자 정의하는 데 사용할 수 있는 많은 속성이 있습니다.

../../_images/area2d_properties.webp

Gravity, Linear DampAngular Damp 섹션은 영역의 물리적 재정의 동작을 구성하는 데 사용됩니다. 아래의 지역 영향 섹션에서 이를 사용하는 방법을 살펴보겠습니다.

Monitoring``Monitorable``는 해당 영역을 활성화 및 비활성화하는 데 사용됩니다.

Audio Bus 섹션을 사용하면 해당 영역의 오디오를 무시할 수 있습니다. 예를 들어 플레이어가 이동할 때 오디오 효과를 적용할 수 있습니다.

Area2D는 CollisionObject2D <class_CollisionObject2D>`을 확장하므로 해당 클래스에서 상속된 속성도 제공합니다. ``CollisionObject2D``의 ``Collision` 섹션에서는 영역의 충돌 레이어와 마스크를 구성합니다.

오버라이딩(Overriding) 가능한 함수들

아마도 Area2D 노드의 가장 일반적인 용도는 접촉 및 겹침 감지입니다. 두 물체가 접촉했음을 알아야 하지만 물리적인 충돌이 필요하지 않은 경우 영역을 사용하여 접촉을 알릴 수 있습니다.

예를 들어, 플레이어가 주울 수 있는 동전을 만든다고 가정해 보겠습니다. 동전은 단단한 물체가 아닙니다. 플레이어는 그 위에 서거나 밀 수 없습니다. 단지 플레이어가 동전을 만지면 사라지기를 원할 뿐입니다.

플레이어 바디를 위한 코드입니다:

../../_images/area2d_coin_nodes.webp

겹침을 감지하기 위해 Area2D에 적절한 시그널를 연결합니다. 어떤 시그널를 사용할지는 플레이어의 노드 유형에 따라 다릅니다. 플레이어가 다른 지역인 경우 area_entered``를 사용하세요. 그러나 플레이어가 ``CharacterBody2D``(따라서 ``CollisionObject2D 유형)라고 가정하고 body_entered 시그널를 연결하겠습니다.

참고

시그널 사용에 익숙하지 않은 경우 :ref:`doc_signals`의 소개를 참조하세요.

extends Area2D

func _on_coin_body_entered(body):
    queue_free()

이제 우리 플레이어가 코인을 모을 수 있습니다!

일부 다른 사용 예제:

  • 영역은 부딪혀 피해를 주는 총알 및 기타 발사체에 적합하지만 튕김과 같은 다른 물리학은 필요하지 않습니다.

  • 적 주위의 넓은 원형 영역을 사용하여 "감지" 반경을 정의합니다. 플레이어가 해당 지역 밖에 있으면 적은 그것을 "볼" 수 없습니다.

  • "보안 카메라" - 여러 대의 카메라가 있는 대규모 레벨에서 각 카메라에 영역을 연결하고 플레이어가 들어갈 때 활성화합니다.

2D 이동 구조를 구현하는 예제는 2D 이동 개요를 참고하세요.

지역 영향

노드 영역의 두 번째 주요 용도는 물리학을 변경하는 것입니다. 기본적으로 해당 영역에서는 이 작업이 수행되지 않지만 Space Override 속성을 사용하여 이를 활성화할 수 있습니다. 영역이 중복되는 경우 Priority 순서로 처리됩니다. (우선순위가 높은 영역부터 먼저 처리됩니다.) 재정의에는 네 가지 옵션이 있습니다.

  • 결합 - 영역은 지금까지 계산된 값에 해당 값을 더합니다.

  • 교체 - 영역이 물리 속성을 대체하고 우선순위가 낮은 영역은 무시됩니다.

  • 결합-교체 - 해당 영역은 우선순위가 낮은 영역을 무시하고 지금까지 계산된 값에 중력/댐핑 값을 추가합니다(우선순위 순).

  • 대체-결합 - 이 영역은 지금까지 계산된 모든 중력/감쇠를 대체하지만 나머지 영역은 계속 계산합니다.

이러한 속성을 사용하면 여러 개의 겹치는 영역이 있는 매우 복잡한 동작을 만들 수 있습니다.

재정의할 수 있는 물리 속성은 다음과 같습니다.

  • 중력 - 해당 영역 내부의 중력의 강도입니다.

  • 중력 방향 - 이 벡터는 정규화할 필요가 없습니다.

  • 선형 댐프 - 물체가 이동을 멈추는 속도 - 초당 선형 속도가 손실됩니다.

  • 각도 댐프 - 물체가 회전을 멈추는 속도 - 초당 각속도가 손실됩니다.

중력

Gravity Point 속성을 사용하면 "어트랙터"를 생성할 수 있습니다. 해당 영역의 중력은 Point Center 속성에 의해 지정된 점을 향해 계산됩니다. 값은 Area2D를 기준으로 하므로, 예를 들어 ``(0, 0)``를 사용하면 객체가 영역 중앙으로 끌어당겨집니다.

예제

아래 첨부된 예제 프로젝트에는 물리 재정의를 보여주는 세 가지 영역이 있습니다.

../../_images/area2d_override.gif

이 프로젝트는 여기에서 다운로드할 수 있습니다: area_2d_starter.zip