타지않는 놀이터

[고도4] Part.1 - 4 주인공을 만들자 본문

강좌/Godot 4 - Part.1

[고도4] Part.1 - 4 주인공을 만들자

김메가 2023. 12. 18. 00:18

이번 시간에는 플레이어가 조작할 주인공 캐릭터를 만들어보자.

 

지난 시간에 만들었던 stage_1씬을 열고 Sprite2D노드를 하나 생성하자. 노드를 선택한 상태에서 F2키를 누르거나, 노드를 우클릭하면 나타나는 메뉴에서 Rename버튼을 클릭하면 노드에 이름을 지어줄 수 있다. 플레이어가 조작할 캐릭터이니 ‘Player’라는 이름을 지어주자.

 

그 다음, 파일 시스템에서 다음 경로의 그래픽 파일을 Playertexture속성에 할당해주자. res://graphic/character/main_character/idle_000.png

 

이렇게 플레이어 캐릭터의 그래픽을 표시하는 Sprite2D를 만들게 되었다. 다음으로 우리가 할 일은 플레이어의 조작에 따라 이 캐릭터가 움직이도록 하는 것이다. 이를 위해서 우리는 [스크립트]를 작성해야 한다.

 

[스크립트](Script)란 간단히 말해서 프로그래밍 언어를 이용하여 우리가 원하는 부품을 우리가 직접 만드는 것이다. 모니터, 키보드, 스피커 등의 부품을 갖고 있다고 해서 노트북이 저절로 만들어지지는 않는다. 각 부품을 이어주고 의도한 대로 동작하게 하는 또다른 부품은 노트북 공장에서 스스로 제작해야 한다. 마찬가지로 고도엔진이 다양한 기능과 노드를 제공하긴 하지만, 결국 그 노드들을 연결하고 관리하려면 우리가 스스로 시스템을 만들어야 하며 이를 위한 것이 바로 [스크립트]이다.

 

우리는 앞으로 스크립트를 계속 만들게 될 것이다. 파일 시스템에서 그 [스크립트]들을 모아두기 위한 script폴더를 만들자.

 

script폴더를 우클릭하고 Create New – Script 메뉴를 클릭하자.

 

새로운 스크립트를 생성하는 창이 나타나는데, Inherits라는 부분에 주목하자. Inherits는 한국어로 상속한다는 의미이다. 우리가 생성할 [스크립트]가 무엇을 기반으로 동작할 지를 지정하는 부분인데, 우리가 지금 만들 [스크립트]Player노드에 부착할 것이고, Player노드는 Sprite2D이므로 이 스크립트는 Sprite2D를 상속해야 한다. Inherits칸 바로 오른쪽의 버튼을 클릭하자.

 

그리고 Sprite2D를 검색해서 선택해준다.

 

InheritsSprite2D로 지정된 것을 확인하고, [스크립트] 파일의 이름을 player.gd로 지정한 다음 Create버튼을 클릭하자.

 

그러면 파일 시스템에서 [스크립트] 파일이 생성된 것을 확인할 수 있다. player 스크립트를 더블클릭하자.

 

그러면 메인 스크린이 스크립트 에디터(처음 소개할 때는 스크립트 스크린이라고 했지만 스크립트 에디터로 더 많이 불린다.)로 전환되면서 player 스크립트가 열린다. 이렇게 스크립트파일을 열고 수정할 수 있다.

 

스크립트 생성시 기본적으로 작성 되어있는 내용을 간단히 살펴보자.

 

이 스크립트가 Sprite2D를 기반으로 작동한다(Sprite2D를 상속한다)는 의미이다. 아까 우리가 스크립트 생성창에서 Inherits Sprite2D로 지정한 것이 반영된 것이다. 만일 이 스크립트가 Sprite2D가 아닌 다른 노드를 상속하게 수정하고 싶다면 이 부분에서 ‘Sprite2D’를 지우고 원하는 것을 입력하면 된다.

 

#기호와 함께 그 뒤에 이어서 작성한 내용은 [주석]이다. [주석]은 스크립트가 동작할 때 아무런 영향을 끼치지 않으며 없는 내용과 같다. [주석]의 역할은 그냥 메모이다. 이 스크립트에 대하여 주의할 사항들이나 코드에 대한 설명을 기록할 때 사용한다.

 

func [메서드](‘함수라고도 부른다.)를 만들 때 작성하는 키워드이다. [메서드]는 이 스크립트의 어떤 동작을 명시한 것이다. 위 스크린샷에서는 _ready라는 이름의 [메서드]를 정의하고 있는데, 그 내용은 아직 작성되지 않았다. 고도에서 내용이 없는 [메서드]는 내용이 있어야 할 자리에 pass키워드를 넣어야 오류가 나지 않는다.

 

_ready메서드 바로 다음 부분도 마찬가지로 이번에는 _process라는 비어 있는 메서드가 정의되어 있다.

 

_ready메서드는 이 스크립트가 부착된 노드가 게임 실행 중 생성되었을 때 딱 한 번 작동하고, _process메서드는 게임 실행 중 매 프레임마다 한 번씩 반복적으로 작동하는 메서드이다. 지금부터 _process메서드에 내용을 작성해서 캐릭터를 움직이게 해보자.

 

_process메서드의 내용 중 pass를 지우고 그 자리에 스크린샷과 같이 코드를 작성하자. 이때 position 앞의 빈 공간은 [Tab]키를 눌러서 입력해야 한다. 이를 [들여쓰기]라고 하는데, 고도엔진에서는 어떤 코드가 어느 부분에 포함되어 있는 지를 이 [들여쓰기]를 통하여 구분한다. 스크린샷의 상황을 예로 들자면, func 키워드로 메서드를 선언한 다음 줄부터 [들여쓰기]를 하면 그 내용은 해당 메서드에 포함되는 내용이라는 것이다.

 

코드를 작성했으면 Ctrl+S를 입력하여 스크립트를 저장하자.

 

그런 다음 파일 시스템의 player스크립트를 씬 독의 Player노드로 드래그하자.

 

Player노드 오른쪽에 스크립트 버튼이 나타나면 제대로 된 것이다.

 

실수로 다른 노드에 스크립트를 부착했다면, 해당 노드를 선택하고 씬 독 오른쪽 위에 있는 스크립트 떼기 버튼을 클릭하거나 노드를 우클릭하면 나타나는 메뉴에서 Detach Script를 선택하면 노드로부터 스크립트를 제거할 수 있다.

 

스크립트를 제대로 부착했다면 메인 스크린을 2D 스크린으로 전환하고 Player노드를 보기 좋은 위치에 옮겨 놓자.

 

이제 스크립트가 제대로 동작하는지 확인하기 위하여 게임을 실행시켜보자. F6키를 누르거나 또는 에디터 오른쪽 위의 [현재 씬 실행] 버튼을 클릭하여 우리가 만든 게임을 실행시킬 수 있다.

 

캐릭터가 오른쪽으로 천천히 움직이면 성공이다.

 

게임 창을 닫고 다시 스크립트 에디터로 전환해서 player스크립트를 수정하자. 이번에는 단순히 오른쪽으로 움직이는 것 만이 아니라 플레이어의 조작에 따라 좌우로 이동하는 기능을 추가해보자.

 

스크린샷과 같이 _process메서드의 내용을 수정하면 된다. 스크린샷에 나타나 있는 코드 중 주석은 입력하지 않아도 된다. (각 코드의 의미가 궁금하다면 주석을 읽어보자.)

 

Ctrl+S를 눌러 저장하고, 다시 한번 F6[현재 씬 실행]버튼을 클릭하여 게임을 실행한 뒤, 좌우 방향키를 눌러보자. 조작에 따라 오른쪽 왼쪽으로 움직이는 캐릭터를 볼 수 있을 것이다.