티스토리 뷰

728x90

고도 스크립트 개요, 예약어와 연산자, 고도 스크립트 타입과 변수 선언, 고도 스크립트 클래스와 함수, 고도 스크립트의 제어문에 이은 글이다.

 

시그널은 오브젝트 간에 메시지를 주고받기 위한 도구로 시스템에 내장된 시그널은 필요에 따라 사용자 함수에 연결하여 해당 시그널을 받아서 사용하면 된다.  사용자 오브젝트에 시그널을 적용하고 싶다면 시그널을 정의하는 과정과 시그널을 발생시키는 과정이 필요하다.

 

시그널 연결하기

위의 그림은 고도에 내장된 RigidBody라는 클래스의 도움말 화면으로 RigidBody 클래스에서 제공하는 시그널을 확인할 수 있다. 시스템 클래스가 제공하는 시그널의 경우에는 connect로 사용자 함수에 연결만 하면 해당 이벤트가 발생하는 시점에 지정한 함수가 호출되는 방식이다.

 

위의 코드는 현재 클래스가 상속받은 클래스에 있는 "body_entered" 시그널을 현재 클래스의 "_on_body_entered" 함수에 연결한 것이다. 바로 아래는 Timer 클래스의 인스턴스를 통해서 타이머 시그널을 받아 "_on_Timer_timeout" 함수로 처리하고자 하는 과정이다. connect(시그널 이름, 수신 오브젝트, 수신 함수 이름)의 형식을 사용한다.

 

시그널을 연결하는 또 다른 방법은 위의 그림처럼 대화창을 이용하는 방법이다. 씬 트리의 특정 노드를 선택하면 오른쪽 그림처럼 노드 도크> 시그널 탭에 연결할 수 있는 시그널 목록이 나오고 원하는 시그널을 더블클릭하면 좌측의 "시그널을 메서도에 연결" 대화창을 통해서 시그널을 연결할 수 있다. 받는 메서드는 connect에서 기술했던 시그널 수신 함수를 지칭한다. 클래스 이름과 시그널 이름으로 함수 이름을 자동으로 만들어 주지만, 사용자가 임의로 변경할 수 있다. 지정한 수신 함수는 스크립트에 자동으로 추가되면서 나름의 코드를 기술할 수 있다. 

 

[connection signal="tree_entered" from="." to="." method="_on_RhythmGameDemo_tree_entered"]

이렇게 연결하는 시그널 연결의 경우에는 수신 함수는 스크립트 파일에 작성하지만 connect문은 스크립트 내에 포함되지 않고 위의 파일 내용처럼 씬 파일내에 connection 으로 기술된다.

 

위의 그림은 씬 파일에 등록된 시그널 연결 예제이다.

 

 시그널의 정의와 발생

사용자 시그널을 만들기 위해서는 signal 키워드와 시그널 이름으로 시그널을 정의해야 한다. 위의 예제처럼 인수를 가질 수 있으며 인수가 있는 시그널의 경우에는 시그널을 발생시키는 시점에 해당 인수도 같이 넘겨주어야 한다.

 

signal 키워드로 정의한 시그널도 시스템 내장 시그널처럼 connect로 연결해야 해당 시그널을 받을 수 있다. 시그널을 발생시키는 방법은 위의 예제처럼 emit_signal(시그널 이름, 인수)의 형식으로 기술하면 된다. 

 

사용자 클래스에 시그널을 정의한 경우에도 시스템 내장 시그널처럼 위의 그림과 같이 씬 트리의 특정 노드를 선택하면 우측 노드 도크>시그널 탭에서 해당 클래스의 시그널을 확인할 수 있고 더블클릭하여 대화창을 통해서 씬에 시그널을 연결할 수 있다.

 

 

 

728x90
댓글
글 보관함
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31