사실 고도엔진 시작한지는 꽤 되었는데 그냥 진전이 없을 뿐이었다.
여기다 그냥 하루하루 배운거 끄적이면서 정리나 하려고 한다.
고도엔진 문서에서 튜토리얼을 따라하고 있는데, 씬 구성과 기초적인 ui를 익히고 스크립팅 까지 왔다.
기초적인 시그널 다루기에서 뭔가 헷갈리기 시작하면서 꼬여버렸다.
panel
ㄴlabel
ㄴbutton
트리에서 button 노드의 "pressed" 시그널을 panel에 연결하는데 이것부터 이해가 잘 안된다.
버튼 누르면 label의 text와 상호작용하는데 왜 상위 노드인 panel에 연결하는지 모르겠다.
script가 상위노드 panel에 붙어 있어서 그런가? 그렇다면 상위 panel에 왜 스크립트를 붙이는 것인가?
get_node()로 다른 노드들의 상호작용을 용이하게 하기 위해서 ?
아직까지는 잘 모르겠으나,
'시그널 연결은 스크립트가 있는 노드와 연결해야 하는데, 상위노드에 스크립트를 붙이는 이유는 get_node()로 인스턴스를 편하게 하기 위함이다' 라고 우선 결론을 냈다.
우선은 트리구조와 시그널은 그렇다 치고,
스크립트로 넘어가면 또 다른 문제가 있다.
기억을 더듬기 위해 수동으로 스크립트를 써보자면,
extends Panel
func _ready():
get_node("Button").connect("Pressed", self, "_on_Button_pressed")
func _on_Botton_pressed()"
get_node("Label").text = "Hello!"
인데 , 우선 func _ready() 의 정확한 기능을 설명을 봐도 알수가 없었다. 생성자? 초기화? 뉴비에게 친절하지 못한 고도문서에는 이따구로 적혀있는데 못알아먹겠다.
뭔가 준비단계를 말하는거 같기도 하고..
connect의 문법을 살펴보면 "<소스_이름>.connect(<시그널_이름>, <대상_이름>, <대상_함수_이름>" 이라고 한다.
인스턴스 된 노드를 대상 함수로 연결한다 ?
인스턴스 된 노드의 시그널을 대상 함수로 연결한다 ?
연결 관계를 잘 모르겠는데 다른 예시가 없으니 일반화 하여 추론할수도 없다. 답답하다.
뒤쪽 시그널 파트에 가면 조건이 만족되는 시그널은 방출 (emit) 한다고 하는데, 그 방출의 방향을 결정하는것 같기도 하다. 예를들면, pressed의 시그널은 버튼이 눌려지면 방출되는 시그널이고, 방출 대상은 문법의 <대상함수이름>인것 같다..! 근데 대상 이름은 왜 써주는 거지? 스코프를 따로 정하기 위해서인가?
정리해보면 , <시그널이름> 의 조건이 만족되면 -> 버튼이 눌리면
<대상함수이름> 을 실행한다 -> 라벨의 텍스트를 바꾼다.
내가 모르는걸 정리해보자 ....
1. 스크립트 붙는 위치와 시그널 대상 노드의 위치
2. func _ready 가 하는 기능 ?
3. connect 문법에서 <대상함수이름> 의 역할 ?