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.

캔버스 레이어

뷰포트 및 캔버스 아이템

Node2D 또는 Control 와 같은 2D 노드는 모든 2D 노드의 기초가 되는 CanvasItem 로부터 상속됩니다. CanvasItems은 트리 형태로 배열될 수 있고 변형을 상속받게 됩니다. 이는 부모를 옮길 때 자식들도 함께 움직이는 것을 의미합니다.

이러한 노드는 뷰포트의 간접 또는 직접적인 자식으로 배치되고 이를 통해 보여집니다.

뷰포트는 Viewport.canvas_transform 속성을 가지는데 사용자 정의 Transform2D 변형을 통해 모든 CanvasItem 계층을 변형할 수 있습니다. :ref:`Camera2D <class_Camera2D>`와 같은 노드는 이 변형을 바꾸는 것에 의해 작동됩니다.

스크롤과 같은 효과를 얻으려면 루트 캔버스 항목 및 전체 씬을 이동하는 것보다 캔버스 변환 속성을 조작하는 것이 더 효율적입니다.

그러나 일반적으로 게임이나 애플리케이션의 모든 것이 캔버스 변환의 대상이 되는 것을 원하지 않습니다. 예를 들면 다음과 같습니다:

  • 패럴랙스 배경: 무대 나머지 부분보다 느리게 움직이는 배경.

  • UI: 게임 세계에 대한 우리의 관점에 겹쳐지는 사용자 인터페이스(UI) 또는 헤드업 디스플레이(HUD)를 생각해 보세요. 우리는 게임 세계에 대한 관점이 바뀌더라도 생명점 카운터, 점수 표시 및 기타 요소가 화면 위치를 유지하기를 원합니다.

  • 전환: 전환에 사용되는 효과(페이드, 블렌드)가 고정된 위치에 남아 있기를 원할 수 있습니다.

어떻게 이러한 문제를 하나의 씬 트리에서 해결할 수 있을까요?

캔버스레이어

이 해답은 자식들과 손자들에 분리된 2D 렌더링 레이어를 추가하는 CanvasLayer 노드에 있습니다. 뷰포트 자식들은 기본적으로 "0" 레이어에 그려집니다. 반면에 CanvasLayer는 아무 숫자 레이어에 그려집니다. 더 큰 숫자를 가진 레이어가 위에 그려집니다. 또한 각 CanvasLayers 만의 변형을 가지고 다른 레이어의 변형에 의존하지 않습니다. 이것은 세계가 움직이는 동안에 UI를 고정될 수 있게 해줍니다.

이에 대한 예는 시차 배경을 만드는 것입니다. 이는 "-1" 레이어의 CanvasLayer를 사용하여 수행할 수 있습니다. 포인트, 생명력 카운터, 일시정지 버튼이 있는 화면은 레이어 "1"에서도 생성할 수 있습니다.

도표는 다음과 같습니다:

../../_images/canvaslayers.png

CanvasLayer들은 트리 순서에 독립적이고 레이어 수에만 의존합니다. 그래서 필요할 때 인스턴스화 될 수 있습니다.

참고

노드의 그리기 순서를 제어하는 데 CanvasLayers가 필요하지 않습니다. 노드가 다른 항목의 '앞' 또는 '뒤'에 올바르게 그려지도록 하는 표준 방법은 씬 패널에서 노드의 순서를 조작하는 것입니다. 아마도 직관과는 반대로 씬 패널의 맨 위 노드는 뷰포트의 아래쪽 패널 *뒤*에 그려져 있습니다. 2D 노드에는 그리기 순서를 제어하기 위한 CanvasItem.z_index 속성도 있습니다.