본문 바로가기

고도엔진

고도엔진 시작!

사실 고도엔진 시작한지는 꽤 되었는데 그냥 진전이 없을 뿐이었다.

여기다 그냥 하루하루 배운거 끄적이면서 정리나 하려고 한다.

 

고도엔진 문서에서 튜토리얼을 따라하고 있는데, 씬 구성과 기초적인 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 문법에서 <대상함수이름> 의 역할 ?