Godot 엔진에서 2D 플레이어 캐릭터 생성하기
지난 게시글에서 Godot 엔진 프로젝트를 새로 생성하고 루트 노드를 만든 다음, 임의로 배경 노드까지 생성했다. 이번 글에서는 플레이어 캐릭터를 생성해보려고 한다.
플레이어 노드 추가하기
![]() |
| 플레이어 노드 추가 |
이번에는 플레이어 노드를 추가해야 한다. 'Main'으로 이름 붙였던 'Node2D'의 자식 노드로 새로운 노드를 추가한다.
![]() |
| CharacterBody2D 노드 추가 |
'새 Node 만들기' 창이 열리면 'CharacterBody2D'를 검색한다. 'CollisionObject2D' 하위의 'PhysicsBody2D' 하위에 위치해 있다. 충돌 오브젝트 중, 물리 몸체 중에서 캐릭터 몸체 노드로 분류 되어 있다고 보면 된다. 검색되지 않으면 버전 문제일 수 있다. 해당 버전은 4.4.1 버전이다.
![]() |
| player 노드 |
추가한 'characterBody2D' 노드의 이름을 구분하기 쉽게 'Player'로 변경했다.
![]() |
| 노드 설정 경고 |
노드 설정 경고가 표시되는데, 충돌 설정을 아직 안 했기 때문이므로 신경 쓰지 않아도 된다.
'Player' 노드 하위에 새로운 노드 두 개를 추가해 줄 텐데, 하나는 충돌 모양을 지정하는 노드이고, 하나는 캐릭터의 외형을 표현하는 노드이다.
![]() |
| CollisionShape2D 노드 추가 |
먼저 충돌 모양을 지정하는 노드를 추가하려면 Player 노드를 선택하고 'CollisionShape2D'를 검색해서 추가한다.
![]() |
| RectangleShape2D |
추가된 노드를 선택하면 인스펙터 패널의 'Shape' 항목에서 충돌 모양을 지정할 수 있다. 여기서는 사각형으로 지정하려고 '새 RectangleShape2D'를 클릭했다.
![]() |
| 플레이어 노드 텍스쳐 색상 변경 |
'Player'노드 안에 'Sprite2D'를 검색해서 추가하면 외형을 설정할 수 있다. 이미지를 불러와야 하지만 여기서는 일단 빨간 박스로 만들어 두겠다. 인스펙터 패널에서 'Texture'를 '새 CanvasTexture'를 선택해 추가해주고 'Visibility' 항목의 'Modulate'를 통해 색상을 변경해 주었다.
![]() |
| 충돌 박스 크기 조정 |
다시 충돌 노드로 돌아와서 인스펙터 패널의 'Transform'항목을 보면 'Scale'을 통해 크기를 조정할 수 있다. 충돌 박스는 뷰포트 상에서 청록색으로 표시되므로 외형 크기에 맞게 적절히 조절해준다. 참고로 'x', 'y' 글자를 클릭하고 좌우로 드래그하면 쉽게 크기를 조절할 수 있다.
이제 이동 스크립트와 카메라를 추가해주면 플레이어를 움직일 수 있는 상호작용을 구현해 플레이 할 수 있다.
이동 스크립트 추가
![]() |
| 스크립트 붙이기 |
이제 짤막한 코드를 작성해야 하는데, 매우 간단하므로 걱정하지 않아도 된다. 일단 'Player' 노드를 우클릭해 '스크립트 붙이기'를 찾아 클릭한다.
![]() |
| 노드 스크립트 붙이기 |
'노드 스크립트 붙이기'창이 뜨는데 기본 설정 그대로 두고 '만들기'를 클릭한다.
![]() |
| player.gd |
화면 왼쪽 하단 즐겨찾기에 'player.gd'라는 파일이 생성된 모습을 볼 수 있다.
![]() |
| Script 탭 |
동시에 뷰포트가 'Script' 탭으로 전환되며 코드를 작성할 수 있는 창이 나타난다. 이 창에 다음의 코드를 그대로 작성한다.
@export var speed = 200 # Inspector에서 속도 조정 가능
func _physics_process(delta):
var velocity = Vector2.ZERO
if Input.is_action_pressed("ui_right"):
velocity.x += 1
if Input.is_action_pressed("ui_left"):
velocity.x -= 1
if Input.is_action_pressed("ui_up"):
velocity.y -= 1
if Input.is_action_pressed("ui_down"):
velocity.y += 1
velocity = velocity.normalized() * speed
move_and_collide(velocity * delta)
move_and_collide()는 Godot 엔진의 기본적인 충돌 처리 방식이다.
![]() |
| 이동 스크립트 작성 |
스크립트를 작성하고 다시 '2D' 탭을 클릭하면 뷰포트를 이전 화면으로 돌릴 수 있다.
카메라 추가
![]() |
| Camera2D 노드 추가 |
'Player' 노드를 다시 선택하고 'Camera2D'라는 노드를 추가한다.
![]() |
| 카메라 인스펙터 |
그럼 위 이미지와 같이 인스펙터가 설정되어 있는데 그대로 두면 시점이 플레이어에 고정되어 있다.
![]() |
| 뷰포트 카메라 영역 |
뷰포트에 나타난 분홍색 선의 박스가 카메라가 비추는 영역이다.
![]() |
| 배경 노드 색상 변경 |
기존 하얀 배경 그대로 두면 플레이어가 움직여도 움직였는지 확인이 불가능하니 그라디언트로 변경해주었다.
이제 저장한 뒤 'F5'를 누르면 게임이 실행된다.
게임의 화면이 작다면, 상단 메뉴의 '프로젝트'-'프로젝트 설정'-'표시'-'창'에서 뷰포트의 너비와 높이를 조정하면 된다. 게임 화면의 모드도 여기서 풀스크린으로 변경할 수 있다.


















댓글
댓글 쓰기