이 카테고리는 고도 엔진(Godot Engine) 관련 문법을 기록하고 저장하기 위해 만든 공간입니다.
이번에는 고도 엔진의 뼈대를 다루는 핵심 기술, '노드(Node) 제어의 기초: $와 get_node() 사용법'입니다.
게임 개발을 하다 보면 "버튼을 누르면 플레이어가 점프하게 해라", "적의 체력바 UI의 숫자를 바꿔라"처럼 스크립트에서 다른 노드(오브젝트)에 접근해서 명령을 내려야 할 때가 숨 쉬듯 자주 발생합니다. 이때 원하는 노드를 내 맘대로 찾아오기 위해 사용하는 가장 기본적인 방법들을 알아보겠습니다.
1. 정석적인 방법: get_node()
get_node() 함수는 괄호 안에 대상 노드의 '경로(Path)'를 문자열로 적어서 해당 노드를 가져옵니다. 내 컴퓨터의 폴더 안에서 파일을 찾는 것과 똑같은 원리입니다.
extends Node2D
func _ready():
# 1. 현재 스크립트가 붙은 노드의 바로 아래 자식인 'Player' 노드를 가져옵니다.
var player_node = get_node("Player")
player_node.jump()
# 2. 자식의 자식 노드(손자 노드)를 찾을 때는 슬래시(/)로 경로를 이어줍니다.
var weapon_node = get_node("Player/Weapon")
weapon_node.attack()
2. 가장 많이 쓰는 단축키: $ (달러 기호)
하지만 매번 get_node("")를 타이핑하고 따옴표까지 적는 것은 매우 번거롭습니다. 그래서 고도 엔진은 $ 기호를 제공합니다. $노드이름을 적으면 get_node("노드이름")과 완벽하게 똑같이 작동하며, 코드가 훨씬 짧고 예뻐집니다. 실전에서는 90% 이상 이 방식을 사용합니다.
extends Node2D
func _ready():
# get_node("Player")와 완전히 동일합니다. 타이핑이 훨씬 빠르죠!
var player_node = $Player
player_node.jump()
# 노드 이름에 띄어쓰기가 있다면 따옴표를 함께 써주어야 합니다.
var boss_node = $"Big Boss"
3.경로가 꼬이는 걸 막아주는 것: % (씬 고유 이름)
$나 get_node()의 가장 큰 단점은 씬 트리(Scene Tree)에서 노드의 위치를 다른 곳으로 옮기면 경로가 틀어져서 에러가 난다는 점입니다.
이때 에디터에서 대상 노드에 우클릭하여 '씬 고유 이름으로 접근(Access as Scene Unique Name)'을 켜주면, 씬 내 어디에 있든 %노드이름 기호만으로 단번에 노드를 찾아올 수 있습니다. UI 작업 시 강력히 추천하는 현대적인 기능입니다.
func _ready():
# Player 노드가 씬 트리의 어디로 이동하든 항상 안전하게 찾아냅니다!
var player_node = %Player
player_node.add_hp(10)
한눈에 보는 노드 접근 핵심 요약
| 기호 / 함수 | 기능 설명 | 장단점 및 실전 활용 |
| get_node("경로") | 지정한 경로의 노드를 가져오는 정석 함수 | 이름에 변수를 넣어 경로를 동적으로 만들 때 유리함 (예: get_node("Enemy_" + str(id))) |
| $ | get_node()의 축약형 기호 | 실무에서 가장 많이 쓰이며 코드가 직관적. 단, 노드 위치 변경 시 경로를 수정해야 함 |
| % | 씬 고유 이름(Scene Unique Name)으로 노드 접근 | 노드의 부모자식 관계가 변경되어도 코드가 망가지지 않아 유지보수에 최고 |
'게임 > 고도엔진 문법' 카테고리의 다른 글
| 13. [고도 엔진] 생명주기 함수: _init(), _ready(), _process()의 차이 (0) | 2026.07.02 |
|---|---|
| 11. [고도 엔진] 클래스(class_name)와 인스턴스 이해하기 (0) | 2026.07.01 |
| 10. [고도 엔진] 문자열(String) 처리와 유용한 내장 함수들 (0) | 2026.06.30 |