XR플밍 - (주말공부) 사전 합반 프로젝트 2.1일차(6/21)

이형원·2025년 6월 21일
0

XR플밍

목록 보기
111/215

0.들어가기에 앞서
기획안이 나와야지 그에 맞춰서 내용을 구현할 수 있지만, 결국 작일(금요일)까지도 기획안이 명확하게 나오지 않아서, 어떤 컨셉으로 게임을 만들어야 할지 고민이 필요할 것 같다.
또 오늘은 여러 개인적인 사정 때문에 그다지 공부를 하지 못했기 때문에, 브레인 스토밍 위주로 생각을 정리해보고자 한다.

1. 서바이벌 게임의 인벤토리란?

지금이나마 볼 수 있는 기획 내용을 보면서 나름대로의 틀을 잡아보려고 했다.

현재 적혀있는 컨셉에 따르자면 (쿠팡맨)꾸빵맨이 물건을 파밍하고 배송하면서 돈을 벌고, 이를 통해서 생존해나가는 컨셉이라고 되어있다. 보니까 탑을 쌓아서 탈출하는 이런 얘기도 있었던 거 같은데 그 기획 내용도 어느샌가 사라져 있는 걸 보니... 기획팀에서도 여러 변동이 있는 모양이다.

반복적인 파밍과 판매란, 결국 어떤 일정한 아이템이 계속 인벤토리로 들어오고, 그것을 판매하는 것으로 돈을 얻는 형식일 것이다. 그리고 래퍼런스 게임을 살펴보면서 문득 이런 생각을 했다.

요 중에서 사실 해 본 건 돈스타브와 래프트 뿐이다만, 이 두 게임이 레퍼런스에 들어가 있다고 한다면 고민되는 내용이 있었다. 그건 자원의 일정 개수를 '수량'으로서 한 칸을 차지하게 한다는 것이다.

게임 컨셉이 어떻게 나올지는 모르지만, 이때까지 인벤토리를 만들었을 때 아이템의 수량을 따로 생각해본 적이 없었다. 의외로 많은 게임에서 이런 아이템의 수량을 지원하지만, 지금껏 내 손으로 구현해본 적이 없는 것이다.

이 부분에 대한 고찰이 필요해 보인다.

2. 인벤토리, 그리고 아이템

아마 이번에는 아이템을 스크립터블 오브젝트를 통해 구현할 확률이 커질 것 같다. 다만 현재 임시이긴 하지만 업무분장 상으로 아이템을 구현하는 담당자는 내가 아니다.
이렇게 된 이유는 아이템에 대한 정보를 아이템 테이블 - Json 등의 방식으로 구현하는 방법으로 만들 것이기 때문에, 이 부분에 대해서는 팀장님이 맡기로 했기 때문이다. 다만 이와 같이 처리되니 인벤토리를 구현해야 하는 내 입장에서는 따로 테스트용 아이템을 만들어야 하고, 다소 어려움이 느껴질 수밖에 없었다.

그렇다면 내가 오늘은 그리 공부할 시간을 내지 못했기 때문에 오늘 늦게 ~ 내일부터 공부해야 할 내용을 아래와 같이 정리했다.

  1. 인벤토리의 구현 방식 - 방식 자체는 공부해보니 생각보다 어렵지는 않았다. 다만, 방식의 선택과 효율성 등의 문제를 고려해야 할 것으로 보인다.
    인벤토리가 크기 제약이 없는 형태라면 List로 구현할 수도 있을 것이다. 하지만 크기의 제약이 있는 상태라고 한다면, 배열로 구현하는 것이 일반적인 것이라 생각되고, 인벤토리의 확장 등의 기능을 처리할 때 어떻게 할 것인지에 대한 고민도 필요할 것이다.

  2. 인벤토리에서 특정 물건의 수량을 추가하는 방법 - 금방 떠오르는 아이디어가 있기는 하지만, 직접 시험해보는 건 다를 것이다.
    우선 생각해보는 건, 스크립터블 오브젝트로 아이템을 만드는 과정에서, '수량'이라는 조건을 확인한 다음, 아이템을 추가하거나 제거할 때 수량을 확인하는 과정을 추가로 넣으면 될 것이다.
    또 아이디어로 수량으로서 스택을 쌓을 수 있는 아이템을 따로 enum 같은 것으로 정리할 수 있을 것이다.

  3. CSV, Json에 대한 복습 및 특강 다시 공부하기
    팀장님이 아이템을 가져간 것 또한 아직 Json에 대한 걸 맡길 수가 없다고 판단한 것이 크다. 사실 아직 자신이 없었던 부분도 있기야 하지만, 나중에 아이템을 만들어주면서 그 아이템을 다루기 위해서는, 이 부분에 대한 이해가 필요할 것이다.

3. 아이디어 정리

아이템 상호작용 같은 다른 작업도 있지만... 어떻게 나올지 도저히 감도 안 잡히니 일단 인벤토리만을 기준으로 설계를 해 보려고 한다.

인벤토리에 필요한 기능은 무엇이 있을까? 크게 아래와 같이 정리했다.

  1. 아이템을 추가한다 -> AddItem()
    1.1 아이템에 필요한 조건 : 아이템명, 아이템설명, 아이템코드, 아이템가격, 아이템의 스택 여부 및 최대스택, 아이콘 이미지 및 프리팹 등
  2. 아이템의 정보를 출력한다 -> PrintItem()
  3. 아이템을 사용한다 -> UseItem()
  4. 아이템을 버린다. 혹은 제거한다 -> DropItem()
  5. (심화)아이템 크래프팅

또한 인벤토리는 MVP / MVC 패턴으로 구성하여 UI 연동 등의 상황을 고려하도록 한다.
따라서 데이터를 가지고 있는 데이터부(Model), 위와 같이 아이템을 추가하거나 제거하는 행동을 하는 행동부(Controller), 해당 인벤토리를 가시적으로 보여줄 수 있는 출력부(View)로 구성하는 것이 좋을 것이다.

아이템 정보는 CSV로 받아오고, 해당 정보를 Scriptable Object로 변환한 뒤 해당 아이템을 인벤토리로 넣는 과정을 생각할 수 있는데, 이는 결코 쉬운 과정은 아닐 것이다. 이 부분에 대해서 어느 정도 생각을 해 볼 필요가 있다.

profile
게임 만들러 코딩 공부중

0개의 댓글