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...
캔버스 레이어
뷰포트 및 캔버스 아이템
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"에서도 생성할 수 있습니다.
도표는 다음과 같습니다:
CanvasLayer들은 트리 순서에 독립적이고 레이어 수에만 의존합니다. 그래서 필요할 때 인스턴스화 될 수 있습니다.
참고
노드의 그리기 순서를 제어하는 데 CanvasLayers가 필요하지 않습니다. 노드가 다른 항목의 '앞' 또는 '뒤'에 올바르게 그려지도록 하는 표준 방법은 씬 패널에서 노드의 순서를 조작하는 것입니다. 아마도 직관과는 반대로 씬 패널의 맨 위 노드는 뷰포트의 아래쪽 패널 *뒤*에 그려져 있습니다. 2D 노드에는 그리기 순서를 제어하기 위한 CanvasItem.z_index 속성도 있습니다.