
안녕하세요. 여영자입니다 :)
지난 시간에는 첫 스크립트를 작성하고
키보드 방향키로 캐릭터를 움직이는 데 성공했습니다.
[40대 AI 초보 성장 일지] 5편
https://dpg.danawa.com/bbs/view?boardSeq=309&listSeq=6042652
오늘은 캐릭터가 더욱 자연스럽게 움직일 수 있도록
서 있을 바닥을 만들어 보겠습니다!!

그런데 바닥만 만들면 정말 캐릭터가 자연스럽게 설 수 있는 걸까요?
일단 하나씩 직접 부딪혀 보겠습니다.

좌측 상단 [씬] 메뉴에서 [새 씬]을 선택해 Main 씬을 생성합니다.

[루트 노드 만들기]에서 [2D 씬]을 선택해 주세요.

생성된 루트 노드의 이름을 main으로 변경한 뒤
[Ctrl + Shift + S]를 눌러 main.tscn으로 [저장]합니다.

이제 무대를 만들 Main 씬은 만들었는데 말이죠.
여기에 Player 씬을 어떻게 가져와야 하는지 모르겠더군요.
그래서 ChatGPT에게 물어봤습니다.

아하!!
그렇다면 이제
Main씬에 Player씬을 인스턴스화하는 작업을 해보겠습니다!

Main 탭에서 [씬 인스턴스화] 아이콘을 클릭합니다.
씬 선택 창이 열리면 [player.tscn]을 선택해 주세요.

Main씬 아래에 Player가 추가된 것을 확인할 수 있습니다.
그런데 말입니다….
(뭔가 또 문제가 있는 느낌)

Main씬에서 [F6]을 눌러 실행해 보니
캐릭터 머리가 화면 밖으로 잘려서 보이더라고요. ㅠㅠ

캐릭터가 잘려 보이는 이유를 ChatGPT에게 물어봤습니다.

아하! Player를 Main 씬에 추가하면
기본 위치가 (0, 0)으로 배치되기 때문에 잘려서 보이는 거군요!
그렇다면 Player의 위치만 수정하면 되겠네요!

Main씬에서 [Player]를 선택한 후

오호!!
이제 캐릭터의 모습이 중앙에서 잘 확인되네요.

위치가 잘 수정되었으니
이제 캐릭터가 움직일 바닥을 만들어 보겠습니다!!

노드 추가부터 시작해 보겠습니다.

(1) 씬 트리에서 [main]을 선택한 뒤
[+(자식 노드 추가)] 버튼을 클릭합니다
(2) 새 노드 만들기 창에서 [StaticBody2D]를 검색한 뒤
(3) [만들기] 버튼을 눌러주세요.

노드를 생성하면 익숙한 경고창이 나타납니다.
충돌 영역을 설정해야 한다는 내용인데요.
혹시 Player의 충돌 영역 설정했던 것 기억하세요?
(기억이 나지 않는다면 4편을 참고해 주세요.)

이번에도 익숙한 CollisionShape2D를 추가해 보겠습니다.

시작 전 [StaticBody2D]의 이름을 [Ground]로 변경했습니다.
앞으로 노드가 많아질 것 같아
이름도 알아보기 쉽도록 깔끔하게 정리했습니다.

(1) 씬 트리에서 [Ground]를 선택한 뒤
[+(자식 노드 추가)] 버튼을 클릭합니다
(2) 새 노드 만들기 창에서 [CollisionShape2D]를 검색한 뒤
(3) [만들기] 버튼을 눌러주세요.

Ground 아래에 CollisionShape2D가 잘 추가되었습니다.
이제 바닥의 충돌 영역 모양을 지정해 보겠습니다.


[CollisionShape2D]를 선택한 뒤
인스펙터의 Shape 항목에서 [비었음]을 클릭합니다.

표시되는 목록에서 [RectangleShape2D]를 선택합니다.

화면에 아주 작은 사각형이 나타났습니다.
이제 이 사각형을 바닥 크기에 맞게 늘려보겠습니다.

RectangleShape2D의 Size 값을
X=600, Y=20으로 변경해 길게 늘려주었습니다.
이제 바닥의 위치를 캐릭터 발 아래로 옮겨보겠습니다.

[Ground]를 선택한 뒤, 인스펙터의 [Position] 값을 조정해
캐릭터 발 아래에 배치한 뒤 [Ctrl + S]를 눌러 저장합니다.
※ Ground는 충돌을 위한 영역이므로 화면에는 보이지 않습니다.

그런데 궁금한 점이 생겼습니다.
바닥은 만들었는데
캐릭터는 어떻게 바닥 위에 자연스럽게 서게 되는 걸까요?
그래서 이번에도 ChatGPT에게 물어봤습니다.

그래서 ChatGPT에게 기존 스크립트를 어떻게 수정해야 할지 물어봤습니다.

이제 ChatGPT가 정리해 준 코드로 교체해 보겠습니다.

[파일 시스템]의 [Player.gd]를 선택한 뒤
스크립트 영역에 붙여 넣기를 해주세요.
그런데 개발을 전혀 모르는 저이기에
계속 늘어나는 스크립트가 걱정이 되더라고요;;
앞으로 더 많이 추가될 텐데 말이지요.

그래서 ChatGPT에게 기존 코드는 그대로 두고,
한글 주석만 추가해 이해하기 쉽게 정리해 달라고 부탁했습니다.
한글로 깔끔하게 정리되어 있으니 한결 마음이 놓이더라고요.

이제 대망의 시간입니다!!
중력이 잘 적용되었는지 확인을 해보겠습니다.

낙하할 구간이 없어 중력이 잘 적용된 건지 확인할 수 없는데요.

낙하하는 모습이 잘 보이도록
Player의 Y 값을 위로 이동해 바닥과 거리를 만들었습니다.
이제 [F6]을 눌러서 확인해 주세요!
(두근두근)
.
.
.

짜잔!!
드디어 캐릭터가 중력의 영향을 받아
바닥으로 자연스럽게 떨어졌습니다!

설명을 위해 보이지 않는 바닥 충돌 영역을 표시해 봤습니다.
바닥이 있는 곳에서는 착지하고,
없는 곳에서는 계속 아래로 떨어지네요!
이제 캐릭터는 공중에 떠 있는 상태가 아니라,
바닥 위에 자연스럽게 서는 게임 캐릭터가 되었습니다.
처음에는 단순히 캐릭터를 움직이는 것만으로도 신기했는데,
이제는 바닥 위에 자연스럽게 서는 모습까지 보니
정말 게임을 만들고 있다는 느낌이 들더라고요.

앞으로 또 어떤 문제를 만나게 될지 모르겠지만,
이번에도 AI와 함께 하나씩 해결해 보겠습니다.
그럼 다음 편에서 만나요!
|
오늘의 기록 ✔ Main 씬 구성하기 ✔ Ground(바닥) 만들기 ✔ 중력 적용하기 ✔ 캐릭터 착지 성공! 다음 미션 ✔ 캐릭터를 더 자연스럽게 움직이기 ✔ 게임다운 요소 하나씩 추가해 보기 |
왠지 어려울 것 같아서 시작을 망설이고 계신 분들 있으신가요?
저도 얼마 전까지는 Godot가 무엇인지도 몰랐던 완전 초보였습니다.
지금도 매번 막히고 헤매지만,
하나씩 해결해 나갈수록 점점 더 재미있어지는 것 같습니다.
우리 같이 천천히 도전해 봐요!
![]()
댓글과 공감은 여영자에게 정말 큰 힘이 됩니다.







