Scripting
- godot 에서 node 에 행위를 추가하는 것.
- 노드 동작하는 방식 외에 자식,부모,형제 같은 다른 노드와 상호 작용하는 방식을 제어
- 스크립트의 지역 범위는 노드
Scripting 지원 언어
c++, c#, VisualScript 등도 지원 하지만 대부분 아직 부족하다는 평이 많다고 한다.
GDScript 는 Godot 의 메인 언어이이기도 하다.
GDSCript ?
- Godot 에서 사용되는 메인 언어. 다른 언어들에 비해 Godot 과 높은 결합
- python 언어랑 비슷함
- 동적 언어
- 스레드 지원
- primitive type 을 제외하고 값을 인자로 넘길 때는 참조값이 넘어감 (pass by reference)
- Garbage Collector 를 지원하지 않음. GDScript 메모리 관리 문서 참고
GDSCript Node 함수들
_init()
생성자_ready()
노드와 노드의 모든 자식이 활성 씬으로 들어갈 때 호출Node.get_node().
스크립트가 있는 노드 기준 상대적인 경로를 사용해 씬에 있는 노드를 가져옴.
바로 아래의 자식을 찾음
노드는 이름으로 참조됨unhandled_input
input 함수나 Control UI 에서 감지하지 않은 input 들을 감지하는 함수다.
보통 게임의 진행과 상관없는 메뉴 호출하는 키 등에 사용한다.
event propagation 을 막고 싶다면SceneTree.set_input_as_handled
를 호출해 줘야 한다. (ex. 키 입력이 다른 상위 노드에 감지되지 않길 원할 때)
시그널(Signal)
시그널 은 특정 행동을 할 때 방출(emit) 한다.
시그널은 스크립트 인스턴스의 모든 함수에 연결 될 수 있다.
시그널은 대부분 GUI 노드에 사용된다.
시그널 사용 예
button 에 pressed() signal 연결 하면, 버튼을 눌렀을 때 할 행동을 정의 할 수 있음
이 때 함수의 이름은 _on_[방출하는 노드]_[시그널 이름]
버튼에 시그널 연결하는 법
버튼 노드를 누르면 오른쪽 노드 창에 시그널들 종류가 있음.
예를 들어, pressed() 시그널을 선택하면 눌렀을 때의 행동을 지정할 수 있음.
preesed() 를 선택하고 아래 연결버튼을 누르면, 눌렀을 때 신호를 보낼 노드를 선택할 수 있음.
신호를 받을 노드의 스크립터로 가보면 시그널 함수가 생성되어져 있음. 그 함수에 하고 싶은 행동들을 넣어주면 됨.
예시 코드
extends Panel
func _ready():
get_node("Button").connect("pressed", self, "_on_Button_pressed")
func _on_Button_pressed():
get_node("Label").text = "HELLO!"
처리(Process) 하기
- 정적 처리(Idel Processing)
- 동적 처리(Physics Procesing)
정적 처리 - Node._process()
스크립트에서 Node._process()
가 발견되면 활성화 됨.
Node._process()
를 사용해 기능 on/off해당 매서드는 매 프레임 마다 호출 됨.
delta
라는 매개변수를 사용하면 초 당 프레임 수와 상관 없이, 항상 동일한 시간이 소요되도록
할 수 있음.각 동적 단계 이전에서 발생해야 하는 과정에 사용해야 함.
- 예를 들면 캐릭터 조종
동적 단계 이전에 실행되며 고정된 시간 간격으로 호출됨. (기본은 초당 60회)
- Physics -> Common -> Physics Fps에서 시간 간격을 변경
동적 처리 -
_physics_process()
_process()
가 호출되는 비중은 프로그램이 초 당 몇 프레임(FPS) 으로 실행되는지에
따라 다름.
'게임 > Godot 엔진' 카테고리의 다른 글
Godot 노드들 (0) | 2021.11.07 |
---|---|
Godot 편집기 Tip (0) | 2021.11.07 |
Gotdot - Tutorial 게임 만들기 (1) (0) | 2021.03.03 |
Godot - Physics (0) | 2021.03.03 |
GODOT - Scene & Node (0) | 2021.01.10 |