plitri

[Godot RPG] 2. 씬, 플레이어 추가

본 글은 연작입니다.


  • ← 이전 글
  • 이 글은… 알 게 뭐람. 아직도 1, 2번 동영상입니다.

본격적으로 게임을 만들어봅시다.

고도엔진의 모든 게임 요소는 씬(Scene, 장면) 으로 만듭니다. 시작의 방 맵 씬 안에 플레이어 씬, 씬, 보물상자 씬 등이 있을 수 있습니다. 또한 모든 요소가 트리 구조로 계층적으로 구성됩니다.

말로만 하자면 어려우니 직접 만들어봅시다.

1. 씬 만들고 저장하기

이미 빈 씬이 열려있을테니, 위쪽의 2D 탭을 먼저 눌러주세요.

오른쪽의 씬 메뉴에서 Node2D를 추가합니다.

만든 노드의 이름을 start_room 으로 바꿉니다.

저장!! ./game/scene/start_room/start_room.tscn 에 이 씬을 저장합니다.

최종적으로 이렇게 들어가있으면 됩니다.

좋아요, 이걸로 시작의 방 맵 씬을 만들고 저장했습니다! 앞으로 이걸 편집할 땐 왼쪽의 파일 탐색기에서 찾아 열면 됩니다.

파일 저장 경로

고도 엔진에서는 프로젝트의 파일을 어디에 저장할지는 개발자 마음입니다!!! 나중에 멘붕하지 않기 위해 여기서는 게임의 구성대로 저장하는 방법을 사용합니다. 게임/씬/씬_이름/씬_이름.tscn 에 저장한 이유를 이제 아시겠죠?

이미지용 폴더, 음악용 폴더 처럼 종류별로 저장하면 나중에 찾을 수 없게 됩니다. 끔찍하군요. 그러니 게임의 구성대로 저장하는데 익숙해집시다.

방금 저장한 씬 확장자가 .tscn 인데요…

알아둡시다. 방금 저장한 시작의 방 씬, 그러니까 start_room.tscn은 은 사실 텍스트 파일입니다! 메모장에서 열 수 있어요. (개발자들이 이 부분을 좋아합니다)

2. 플레이어 추가하기

이번에는 플레이어를 추가해봅시다. 방금 추가한 start_room 노드 아래에 자식으로 KinematicBody2D를 추가하고 이름을 player 로 바꿉니다.

KinematicBody2D는 Node > CanvasItem > Node2D > CollisionObject2D > PhysicsBody2D > KinematicBody2D 에 있습니다.

결과는 이래야 합니다.

어? 그런데 아무것도 안 나옵니다! 아직 조금 더 넣어야 합니다. 설명은 다 넣고 하죠.

player 밑에 sprite (Sprite 노드) 와 col_shape (CollisionShape2D 노드) 를 넣어주세요. 노드 추가 대화상자 위쪽의 검색창을 이용하면 손쉽게 찾을 수 있어요.

결과는 이래야 합니다.

일단 느낌표는 무시합시다.

저장!!! Ctrl + S 를 눌러 저장해주세요.

노드의 종류

방금 여러 종류의 노드를 씬 트리에 넣어봤습니다. 계층적으로 구성되는 게 보이시나요?

각각의 노드는 종류에 따라 다른 일을 할 수 있습니다. 일단 간단하게만 살펴보고 넘어갑시다.

  • start_room: Node2D - 가장 기본적인 2D 노드입니다. 2D 세계의 위치 등을 표현할 수 있습니다.
  • player: KinematicBody2D - 물리 노드입니다. 플레이어 입력으로 움직여서 생기는 부딪침 같은 걸 처리할 수 있습니다.
  • sprite: Sprite - 이미지를 출력하는 노드입니다. 곧 플레이어 이미지를 추가하겠네요!
  • col_shape: CollisionShape2D - 물리 노드 밑에 넣어서 물리 노드가 부딪칠 수 있는 모양을 만듭니다. 지금은 충돌 모양이 없어서 느낌표가 있네요. 이건 한참 나중에 합니다.

노드 이름이 왜 죄다 snake_case 인가요?

프로그래밍에서 이름을 지을 때 모두 영문 소문자로 적고 띄어쓰기 대신 언더바_를 적는 방법을 스네이크 케이스라고 부릅니다. 고도 엔진은 파일 경로가 곧 노드 경로일 가능성이 높은 게임 엔진으로, 플랫폼간 호환성을 위해 안전빵으로 모두 snake_case로 적습니다. 나중에 피보긴 싫잖아요. 강제사항은 아닙니다.

(구체적으로는 윈도는 파일 이름의 대소문자를 안 가리지만 리눅스와 맥은 대소문자를 가리기 때문에 이런 문제가 발생합니다.)

3. 플레이어의 이미지 넣기

아래의 이미지를 일단 임시로 start_room/player_sprite.png 로 저장해주세요.

(방금 대충 그려왔어요!)

이렇게 저장되어 있어야 합니다.

이제 아까 추가한 노드 중 sprite를 클릭해보세요. 아래의 인스펙터 부분의 내용이 바뀌었을 겁니다. 인스펙터에서는 선택한 노드의 상세정보를 확인하고 수정할 수 있습니다.

인스펙터의 Sprite 섹션의 Texture를 클릭해 방금 저장해넣은 이미지를 불러와주세요.

귀찮으면 왼쪽의 파일 매니저에서 이미지를 저기에 드래그해 넣어도 됩니다.

4. 플레이어를 가운데로 옮기기

조금 더 편집기의 사용법을 알아봅시다. 플레이어를 씬의 가운데로 옮겨봅시다. 주의할 점은 옮길 건 플레이어지 방금 이미지를 넣은 스프라이트가 아니라는 점입니다. 그냥 드래그하면 플레이어는 이동 안 하고 이미지만 이동할 거에요!

그러니까 플레이어 아래에 있는 것들은 편집기에서 옮기거나 크기를 바꿀 수 없게 고정해버립시다.

씬 트리에서 플레이어를 선택한 뒤, 편집기 상단의 저렇게 생긴 버튼을 눌러주세요.

아래처럼 되어있어야 합니다.

저걸 클릭하면 해제할 수 있어요. 이제 플레이어를 옮겨도 됩니다. 가운데로 옮겨보세요. (마우스 휠로 확대, 축소, 화면이동을 손쉽게 할 수 있어요)

상속

이 부분은 비프로그래머에게는 어렵습니다. 나중에도 설명하니 관심있는 분만 클릭해주세요.

실행해보기

이제 게임을 실행해봅시다. 위의 재생 버튼 말고, 영화관 같이 생긴 재생버튼을 눌러봅시다.

짜잔! 방금 만든 게임이 실행되었습니다! 아직 조작도 뭣도 아무것도 못 하지만, 플레이어가 가운데 있는 게임을 만들 수 있게 되었습니다.

재생 버튼을 누르면 어떻게 될까요?

이상한 대화상자가 나오네요. 이것의 의미는 게임을 켜면 시작할 씬을 고르라는 것입니다. 재생 버튼은 게임을 처음부터 시작합니다. 지금 편집하고 있는 씬을 실행해보기엔 부적합한 버튼이죠. 잘못 골라도 메인 메뉴의 씬->프로젝트 설정->Application->main_scene 에서 바꿀 수 있습니다. 심심하면 한 번 골라보세요.


다음에는 플레이어가 움직일 수 있게 스크립트를 추가해보겠습니다.