본문 바로가기

게임/Godot 엔진

Godot - Scripting

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