본문 바로가기
프로그래밍/Godot

고도 엔진 (Godot) : 스크립트, 시그널

by drogrammer 2021. 1. 10.
반응형

이번 포스트에서는 2D Scene에 간단한 버튼을 만들고 이벤트 처리를 하는 스크립트를 만들어보자.

1. 테스트용 씬 구성

패널에 레이블과 버튼을 추가해 보자. 씬을 아래와 같이 구성한다.

  • Ctrl + a, "Panel" 검색 후 추가
  • Ctrl + a, "Label" 검색 후 추가
  • 이미 추가된 "Panel" 을 선택 후, Ctrl + a, "Button" 검색 후 추가

씬 구성

각각의 노드를 아래 그림과 같이 배치한다.

  • Label 을 상단 중앙에 두고, Align, Valign을 모두 Center로 설정하고, 텍스트를 "Hello Script" 라고 설정한다.
  • Button 을 중앙에 두고, 텍스트를 "Press Me" 로 설정한다.

노드 배치

2. 스크립트 생성

Panel 노드에 스크립트를 생성할 예정이다. Panel 선택후, 아래 빨강 농그라미 버튼을 누르면 스크립트 추가 팝업이 나온다. "Create" 버튼을 눌러서 생성하자.

스크립트 추가 버튼
스크립트 추가 팝업

 

스크립트를 생성하고 나면, Panel 노드 옆에 스크립트 아이콘이 생기고. 클릭하면 우측에 스크립트 에디터가 열린다.

 

3. 버튼 시그널 연결

버튼 노드 선택 후, 프로그램 우측 패널의 Node 선택 후 Signal 탭을 선택하면 연결 가능한 시그널을 볼 수 있다.

버튼의 연결 가능 시그널들

 

시그널들 중 button_down() 을 우클릭 한 후 Connect 를 선택하면 아래와 같은 시그널 연결 설정 팝업이 나타난다.

시그널 연결 설정 창

연결 대상 스크립트 (Connect to Script) 를 Panel 로 선택하고 Connect 버튼을 누르면 연결된다.

button_up() 에 대해서도 동일한 작업을 수행하자.

 

4. 시그널 콜백 구현

버튼의 시그널 연결로 기존 Panel 스크립트가 아래와 같이 업데이트 된 것을 확인할 수 있다. _on_Button_button_down() 과 _on_Button_button_up() 콜백 함수가 추가되었다.

extends Panel


# Declare member variables here. Examples:
# var a = 2
# var b = "text"


# Called when the node enters the scene tree for the first time.
func _ready():
	pass # Replace with function body.


# Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta):
#	pass


func _on_Button_button_down():
	pass # Replace with function body.


func _on_Button_button_up():
	pass # Replace with function body.

 

각 콜백 함수에서 Label 노드의 텍스트를 각각 "Button Down", "Button Up" 으로 설정해 보자.

extends Panel


# Declare member variables here. Examples:
# var a = 2
# var b = "text"


# Called when the node enters the scene tree for the first time.
func _ready():
	pass # Replace with function body.


# Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta):
#	pass


func _on_Button_button_down():
	get_node("Label").text = "Button Down"


func _on_Button_button_up():
	get_node("Label").text = "Button Up"
get_node 함수는 노드 이름으로 노드 오브젝트를 엑세스하는 함수다.
예를 들어 get_node("Label") 이라고 하면 Label 이라는 이름의 노드 오브젝트를 가져온다.

 

5. 결과 화면

 F5를 누르고 실행하면 아래와 같은 결과를 확인 할 수 있다.

반응형

댓글