본문 바로가기
Godot

[GodotDocs][Step by step] 3. 첫 번째 스크립트 만들기(GDScript)

by 채식금지 2023. 12. 27.
728x90

본 게시글은 고도엔진 공식문서에 작성된 Creating your first script를 정리하였습니다.

 

프로젝트 설정

  • 프로젝트를 새로 만든다.
  • Scene 도크에서 Other Node를 선택여 팝업창을 연다.
  • 검색창(Search:)에 Sprite2D 라고 입력한다.
  • Sprite2D 노드를 선택한다.
  • Create 버튼을 선택하여 Sprite2D 노드가 루트 노드로 생성되도록 만든다.
  • Sprite2D 노드가 프로젝트를 만들었을 때 기본 제공하는 icon.svg 파일을 출력하도록 만든다.
  • Sprite2D 노드를 선택한 후 icon.svg 파일을 Inspector 도크의 Texture 속성에 드래그 앤 드롭한다.
  • icon.svg 파일을 Sprite2D 노드에 드래그 앤 드롭해도 된다.
  • 뷰포트에서 아이콘을 드래그하여 원하는 위치에 배치한다.

스크립트 새로 만들기

  • Sprite2D 노드를 우클릭하여 나온 메뉴에서 Attach Script... 를 선택한다.
  • Scene 도크 오른쪽 상단에 있는 아이콘을 선택해도 된다.
  • Attach Node Script 팝업창이 열리면 아래 서술한 설정을 완료한 후 Create 버튼을 선택한다.
    • Language → GDScript
    • Template → Object: Empty
    • Path → \res://my_sprite_2d.gd
  • 스크립트를 생성하면 자동으로 스크립트 에디터가 활성화된다.

 

 

 

Hello, world!

  • 스크립트 에디터에 아래 내용을 작성한 후 저장한다.
func _init():
    print("Hello, world!")
  • _init 은 클래스 생성자와 같은 역할을 한다.
  • print 함수는 고도 엔진 에디터 하단의 Output 창에 입력한 텍스트를 출력 시켜준다.
  • 작업했던 씬은 sprite_2d.tscn 으로 저장한다.
  • Run Project를 선택하여 프로젝트를 실행한 후 Output 창을 확인해본다.

이미지 회전

  • my_sprite_2d.gd 에 맴버 변수를 추가한다.
  • 맴버 변수는 extentds Sprite2D 아래에 추가한다.
var speed = 400
var angular_speed = PI
  • 처음 추가했던 _init 함수 아래에 _process 함수를 추가한다.
  • _process 함수는 매 프레임마다 호출된다.
  • _process 함수 안에 노드의 회전(rotation)을 수정하는 코드를 작성한다.
func _process(delta):
    rotation += angular_speed * delta
  • my_sprite_2d.gd 파일을 저장한다.
  • 오른쪽 상단의 Run Project 를 선택하여 결과를 확인한다.

이미지 이동

  • _process 함수 안에 노드의 위치(position)을 수정하는 코드를 작성한다.
var velocity = Vector2.UP.rotated(rotation) * speed
position += velocity * delta
  • Vector2.UP.rotated 메소드에 rotation을 입력하면 아이콘을 기준으로 위쪽 방향 벡터를 구할 수 있다.
  • 방향 벡터에 미리 정의해둔 속도(speed)를 곱해 속도 벡터를 구한다.
  • 속도 벡터를 position에 더하면 노드는 이이콘을 기준으로 위쪽으로 계속 이동하게 된다.
  • my_sprite_2d.gd 파일을 저장한다.
  • 오른쪽 상단의 Run Project 를 선택하여 결과를 확인한다.

 

완성된 스크립트

extends Sprite2D

var speed = 400
var angular_speed = PI

func _init():
    print("Hello, world!")

func _process(delta):
    rotation += angular_speed * delta

    var velocity = Vector2.UP.rotated(rotation) * speed
    position += velocity * delta