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...
씬 노드(Scene Node)
소개
``get_node()``를 사용하여 스크립트에서 노드를 참조하는 것은 때때로 취약할 수 있습니다. UI 씬의 버튼을 한 패널에서 다른 패널로 이동하면 버튼의 노드 경로가 변경되고, 스크립트가 하드 코딩된 노드 경로와 함께 ``get_node()``를 사용하는 경우 스크립트는 더 이상 버튼을 찾을 수 없습니다.
이와 같은 상황에서는 노드를 씬 고유 노드로 전환하여 노드의 경로가 변경될 때마다 스크립트를 업데이트하지 않아도 됩니다.
프로젝트 생성하기
이렇게 하고 싶어하는 몇 가지 이유가 있습니다:
씬 트리 독에서 노드를 마우스 오른쪽 버튼으로 클릭하고 상황에 맞는 메뉴에서 **고유 이름으로 액세스**를 선택합니다.
옵션을 선택하면 노드는 이제 씬 트리에서 해당 이름 옆에 백분율 기호(%)가 표시됩니다.
이름 시작 부분에 "%"를 추가하여 노드 이름을 바꾸는 동안 이 작업을 수행할 수도 있습니다. 확인하면 이름 옆에 백분율 기호가 나타납니다.
이제 스크립트에서 노드를 사용할 수 있습니다. 예를 들어 % symbol과 노드 이름을 입력하여 get_node() 메서드 호출로 이를 참조할 수 있습니다.
get_node("%RedButton").text = "Hello"
%RedButton.text = "Hello" # Shorter syntax
GetNode<Button>("%RedButton").Text = "Hello";
동일 씬 제약
씬 고유 노드는 동일한 씬 내부의 노드에 의해서만 검색될 수 있습니다. 이 제한 사항을 설명하려면 Sword 씬을 인스턴스화하는 Player 씬 예제를 고려하세요.
Player 스크립트 내부에서 get_node() 호출 결과는 다음과 같습니다.
다음은 Sword 스크립트 내부에서 get_node() 호출의 결과입니다.
스크립트가 다른 씬의 노드에 액세스할 수 있는 경우 해당 노드에서 get_node()``를 호출하여 해당 노드에서 씬 고유 노드를 가져올 수 있습니다. 씬. 이는 여러 ``get_node() 호출을 방지하는 노드 경로에서도 작동합니다. 씬 고유 노드를 사용하여 Player 스크립트에서 Hilt 노드를 가져오는 두 가지 방법은 다음과 같습니다.
``get_node("Hand/Sword").get_node("%Hilt")``는 Hilt 노드를 반환합니다.
``get_node("Hand/Sword/%Hilt")``는 Hilt 노드도 반환합니다.
씬 고유 이름은 노드 경로 끝에서만 작동하지 않습니다. 중간에 하나의 노드에서 다른 노드로 이동하는 데 사용할 수 있습니다. 예를 들어 Sword 노드는 Player 씬에서 씬 고유 노드로 표시되므로 다음이 가능합니다.
``get_node("%Sword/%Hilt")``는 Hilt 노드를 반환합니다.
대안
씬 고유 노드는 씬을 탐색하는 데 유용한 도구입니다. 그러나 다른 기술이 더 나은 경우도 있습니다.
:ref:`그룹 <doc_groups>`을 사용하면 두 개의 노드가 어디에 위치한 씬에 관계없이 다른 노드에서 노드(또는 여러 노드 그룹)를 찾을 수 있습니다.
:ref:`싱글톤(자동 로드) <doc_singletons_autoload>`는 씬에 관계없이 모든 노드에서 직접 액세스할 수 있는 항상 로드되는 노드입니다. 이는 일부 데이터나 기능이 전 세계적으로 공유될 때 유용합니다.
:ref:`노드.find_child() <class_Node_method_find_child>`는 전체 경로를 알지 못한 채 이름으로 노드를 찾습니다. 이는 씬 고유 노드와 유사해 보이지만 이 방법은 중첩된 장면에서 노드를 찾을 수 있으며 어떤 방식으로든 씬 편집기에서 노드를 표시할 필요가 없습니다. 그러나 이 방법은 속도가 느립니다. 씬 고유 노드는 Godot에 의해 캐시되고 검색 속도가 빠르지만, 메소드가 호출될 때마다 ``find_child()``는 모든 자손(모든 자식, 손자 등)을 확인해야 합니다.