본문 바로가기
도전! N잡러!/도전! 게임 개발!

'나, 물림.' 개발 일지 #006

by NA·WE 2026. 4. 2.
반응형

안녕하세요. 나위입니다.

프로젝트 '나, 물림.'의 개발 일지를 계속 이어갑니다.

이전 포스팅은 아래 링크를 참고해 주세요!

 

 

본격적인 내용. 바로 시작합니다!

 


 

지난 포스팅에서는 튜토리얼, 미니게임의 개발과 데이터 리빌딩을 했었다고 말씀드렸죠.

게임이 점점 만들어지는 게 눈으로 보이다 보니, 개발의 재미 또한 많이 느꼈던 시간들이었다...! 고 생각됩니다.

 

그렇게 개발 5주차에 들어 진행한 작업이란, 마찬가지로 '나, 물림'의 핵심이 되는 시스템이죠.

바로 '아이템'이었습니다.

 

아이템의 정의라고 합니다. (어..?)

 

 

단순한 의미로 '아이템(Item)'이라 함은, 품목, 항목, 개개의 물품을 뜻하는 단어입니다.

 

그리고 게임에서는 주로 '수집 가능한 개별 물품'같은 느낌으로 많이 받아들이죠.

때문에 아이템 시스템을 만든다는 건, 수집된 품목을 관리하거나 사용할 수 있도록 하는 도구. 즉, '인벤토리'의 기능도 함께 내포하는 경우가 일반적입니다.

 

인벤토리 정리 또한 재미가 될 수 있다!

 

 

그렇기에, 저는 아이템 시스템을 만들기에 앞서서 '인벤토리' 구조를 먼저 만들어 두기로 했습니다.

앞으로 어떤 아이템이 만들어질지는 아직 잘 모르겠(왜냐면 아이템은 종류든 개수든 엄청 많아질 거니까요.)지만, 인벤토리가 가져야 할 기능은 명확했거든요.

 

뭔갈 만들어야 하는데 '잘 모르는 것''잘 아는 것'이 있다면, '잘 아는 것'부터 만드는 게 순서 아니겠습니까.

왜냐면 잘 모르는 건 잘 모르는 거니까. 잘 만들 수도 없지 않나...하는...뭐 그런?

 

뭐래는겨

 

 

...여하튼.

제가 원하는 기능은 간단했습니다.

그냥, '아이템'이란 것을 획득하면 화면 하단에 위치한 슬롯(인벤토리 슬롯)에 보여줘. 라는 것이 다였던 거죠.

 

초기 개발에서는 이 정도만 해도 충분할 것입니다.

그렇게 저는 엔진상에서 인벤토리 슬롯을 아래와 같이 만들어 두기에 이릅니다.

 

하단의 8개 슬롯이 바로 인벤토리입니다.

 

 

아직은 별도의 규칙이 제대로 설정되지 않았지만, 이제 하나하나 이어붙여야 할 것입니다.

우선, 저 인벤토리에 저장될 아이템에 대한 정의가 필요하죠.

 

저는 그것을 테이블을 만들어서 정의해보기로 했습니다.

대략 이런 기능 명세를 바탕으로 말이죠.

 

 

  • 아이템은 별도의 테이블(ItemTable)을 통해 ID로 관리한다.
  • 아이템은 획득 시, 인벤토리 슬롯에 순차적(획득 순서별)으로 저장된다.
  • 아이템은 각각 아이콘 형태로 보여져야 하고, 사용 개수를 비롯하여 이름과 설명을 설정할 수 있어야 한다.

 

아주 단순한 기능명세입니다.

저는 이 내용을 담을 신규 테이블로 'Item'을 제작, 게임 내 적용시켰습니다.

 

itemID 이름 설명 사용 횟수 아이콘 이미지
itemID name desc count iconFile
1 라이터 가스가 거의 없는 라이터야. 불을 붙일 때 써야 해. 1 FileName
2 드라이버 나사를 조을 때 쓰는 드라이버. -1 FileName
3 생수 정수된 물. 생존을 위한 필수 요소야. 1 FileName

 

 

 

여기서 '사용 횟수'가 -1인 아이템은 무제한으로 사용할 수 있다고 생각했어요.

때문에 아이템 슬롯에도 ∞(무제한) 기호가 붙도록 하였습니다.

 

그리고 사용 횟수가 양수인 아이템들은, 해당 횟수만큼 사용하면 아이템이 인벤토리에서 제거되도록 설정하였습니다.

그렇게 해야 최대 8개 뿐인 인벤토리 슬롯이 관리될 거라 생각했던 것이죠.

 

이렇게 작업했을 때, 어떤 문제가 생길지는 잘 모르겠지만...

 

일단 해보는 겁니다!

 

 

어쨌거나 이런 과정을 통해 3개의 아이템이 정의되었습니다.

ID 1번 아이템 '라이터'와, 2번 아이템 '드라이버', 3번 아이템 '생수'가 바로 그것이죠.

 

아이템이 저장될 장소와 아이템 정의까지 끝났으니, 다음은 아이템을 획득하는 방식을 만들 차례입니다.

저는 '어떻게 아이템을 획득하게 할 것인가?'를 고민하다가... 기존 만들었던 '대화 시스템'과 연동하는 방식이 좋겠다고 판단했습니다.

장르 자체를 '1인 독백극'이라 해도 좋을 게임이다 보니, 어떤 행위를 하든간에 PC(Player Character)의 상호작용 피드백은 어차피(!) 대사 형태일 것이고, 그러니 대사에다가 아이템 획득을 물려놓아도 이상할 것이 없겠다는 생각이었던 거죠.

 

그런 생각으로 신규 테이블 'DialogueRewardTable'을 제작 하고, 다양한 상황을 체크하여 '아이템'을 지급할 수 있도록 구상하기에 이릅니다.

바로 이렇게요.

 

dialogueGroup 조건 타입 조건 값 성공 대화 그룹 실패 대화 그룹 보상 아이템
dialogueGroupID conditionType conditionValue sucDiaGroupID missDiaGroupID rewardItemID
100 1 1 101 102 1

 

 

 

조건 타입, 조건 값 같은 게 있는데, 이 컬럼을 넣은 이유는 단순합니다.

'똑같은 아이템을 계속 얻으면 안되니까.' 가 바로 저 컬럼이 존재하는 이유였죠. 즉, 조건 타입 1번이란 바로 '아이템 보유 여부'였습니다.

그래서 위 데이터의 작동 방식을 풀어서 설명하자면...

 

100번 대화가 종료되면, 해당 시점에 조건을 체크(1번 아이템을 획득하고 있는지를 체크) 하라.
조건이 맞으면(1번 아이템을 가지고 있지 않으면) 성공 대화를 호출하고 보상 아이템을 지급한다.
조건이 맞지 않으면(1번 아이템을 가지고 있으면) 실패 대화를 호출하고 보상 아이템은 지급하지 않는다.

 

 

1번 아이템을 가지고 있으면, 똑같은 아이템은 또 얻지 못하게 하라! 라는 것이 바로 저 테이블의 기능이라 하겠습니다.

아래는 적용 결과 스크린샷입니다.

 

1번 아이템이 없으면? 1번 아이템 획득.
1번 아이템이 있으면? 아무것도 없다는 대사 호출.

 

 

힘들게 테이블을 쭉 - 만들었으니 게임 내 적용도 시켜야겠죠?

이 부분에서는 또 우리 Gemini Pro씨가 고생해 주셨습니다.

 

물론, Gemini씨가 뱉어낸 코드는 제가 또 손수 적용시켜줘야 하지만 어쩌겠어요? 그게 맞는 거잖아요.

이렇게 내가 직접 한땀한땀 채워나간다는 느낌이 이게 또 나쁘지가 않습니다. 코딩을 모르지만, 배우는 느낌도 들어요. 좋습니다.

 

 


 

 

아이템을 정의하고 획득까지 했으니 이제는 '사용'할 차례입니다.

아이템의 사용 또한, 일단은 간단하게 구현하려고 해요.

 

 

  1. 인벤토리의 아이템을 선택한다. (마우스 클릭, 또는 숫자 키 입력)
  2. 선택한 아이템 이미지가 마우스 커서로 바뀐다. (아이템 사용 준비 상태)
  3. 상호작용 가능한 오브젝트에 상호작용 한다.
  4. 해당 오브젝트에 아이템을 쓸 수 있는 것이라면, 아이템 사용 처리를 한다.
  5. 해당 오브젝트에 아이템을 쓸 수 없는 것이라면, 아이템 사용 불가 메시지를 호출한다.

 

 

여기까지가 바로 아이템의 사용 로직입니다.

이렇게만 보면 정말 간단한 기능인데, 여기에 이제 수많은 예외처리와 추가 기능과 기타 등등이 덕지덕지(...) 달라붙을 것입니다.

그 모든 '덕지덕지'를 끌어안으면서 아무 문제 없이 기존의 기능이 수행되어야만 '잘 만든 시스템'이라 할 수 있겠죠.

 

벌써 아찔합니다.

 

 

...여하튼.

지금 이야기한 '아이템 사용' 관련해서는 이 개발 일지에서 다루기가 힘들겠어요.

온전히 코딩 관련한 부분이다 보니 그렇습니다. 제가 이해하지 못하는 것에 대해서 어떻게 설명할 수 있겠습니까. (당당)

 

저는 프롬프트를 썼고!! Gemini씨가 코딩을 해줬고!! 나는 적용했을 뿐이고...!!

 

뭐! 왜! 뭐..!

 

 

그럼에도 불구하고 꽤 긴 시행착오(버그 발견 → 수정 적용 테스트 반복...)가 있었습니다.

그리고 전, 결국에는 기본적인 아이템 / 인벤토리 기능을 구현할 수 있었죠. 다행한 일입니다.

 

그 외로는 만들어진 시스템을 활용한 컨텐츠 제작이 주된 활동이었습니다.

화장실을 만들고...

 

화장실 제작.

 

 

작업실과 연구실의 오브젝트 배치도 마무리 짓고...

 

작업실 공간.

 

 

연구실 공간.

 

 

이후로는 실행 파일을 빌드해보면서 제대로 돌아가는지 확인하는 시간도 가졌었죠.

어느덧, 게임같은 무언가가 완성된 모습을 보니 감회가 새롭기도 했었답니다.

 

처음 빌드한 파일의 모습입니다. (감동)

 

 


 

 

이렇게 5주차 작업의 내용을 좀 더 상세하게 다뤄봤습니다.

 

다음으로는 개발 6주차에 작업했었던 내용을 정리해 봤어요.

이번에도 지난 번과 마찬가지로 GitHub의 History 이력을 보면서 정리해봤답니다.


  • '나, 물림' 개발 일지 (2025. 1. 30 ~ 2026. 2. 7)
    • 버전 관리 : GitHub
    • 사용 엔진 : Godot 4.5.1
    • 작업 내용
      • 외부 씬 제작
        • 아파트 외부 제작
        • 놀이터 제작
      • 테스트용 치트키 구현
      • 로딩 씬 제작
      • 기존 시스템 추가 기능 구현
        • 아이템 사용 타입 확장
        • 대화 타입 확장
        • 이벤트 타입 확장

 

내용을 보니, 게임의 컨텐츠가 확장되어가는 것이 눈에 보여집니다.

이 시기에는 하고자 하는 연출을 만들다 보니 필요한 타입이 계속 생겨서, 기존 구현한 테이블에 지속적으로 새 기능을 적용시키면서 컨텐츠도 가져다 붙이는 식의....

 

말하자면 '주먹구구식' 개발 프로세스를 가져갔었죠.

1인 개발이니 프로세스니 뭐니 그런게 무슨 의미가 있겠습니까 핫하 어차피 제가 다 하는 건데요 (크흑...ㅠ)

 

 

어차피 다 내 일이다 크윽...!

 

여하튼, 저의 개발 일지는 아직 끝나지 않았습니다.

계속 이어질 '나, 물림'의 여정을 지켜봐주세요!!

 

감사합니다 :)

반응형

댓글