1 분 소요

Intro

  • RPG 게임에서 빠질 수 없는 기능중 하나인 인벤토리를 구현해보고싶어서 이것저것 열심히 찾아보고 공부해본것을 정리해보려합니다.

  • 인벤토리는 UI만 만들면 절반은 만든거 아닌가라고 생각했었는데, 실제로 만들다보니 여러가지가 얽히고섥혀 제대로 계획/설계를 하고 들어가지 않으면 내가 뭘 만들었고 어디서 어떻게 연결할건지를 헷갈릴 요소가 많다고 느꼈습니다.

  • 또한 다른분들의 아이디어나 코드를 보면서 내가 그동안 얼마나 초보같은 코드를 짜왔는가도 느끼게된 경험도했습니다.

인벤토리 시스템 구조도

  • 먼저 인벤토리에 필요한 아이템과 그 아이템데이터를 어떻게 만들것인가를 그려봤습니다.

image

image

  1. 인벤토리
    • Inventory : 전체 아이템들을 관리하고 인벤토리 시스템의 실질적인 동작을 담당합니다.
  2. 아이템
    • Item : 인벤토리의 각 슬롯에 들어가는 실제 아이템입니다. 각 아이템이 개별적으로 가지는 데이터를 보관합니다.
    • CountableItem : 소모성 아이템(수량이 있는)
      • PortionItem : 포션 아이템
    • EquipmentItem : 장비 아이템
      • WeaponItem : 무기 아이템
  3. 아이템 데이터
    • ItemData : 각 아이템이 공통으로 가질 데이터들을 보관하는 클래스로 Scriptable Object를 상속합니다.
    • CountableItemData : 소모성 아이템(수량이 있는) 데이터
      • PortionItemData : 포션 아이템 데이터
    • EquipmentItemData : 장비 아이템 데이터
      • WeaponItemData : 무기 아이템 데이터
  4. 인벤토리 UI
    • InventoryUI : 사용자의 조작을 처리하고 Inventory와 상호작용합니다.
    • InventoryPopupUI : 인벤토리에서 확인/취소 등 팝업 UI들을 담당합니다.
    • ItemSlotUI : 인벤토리의 각 슬롯 UI입니다.
    • ItemTooltipUI : 아이템 툴팁을 표시할 UI입니다.
    • MovableHeaderUI : 인벤토리 UI 상단을 드래그하여 움직일 수 있는 기능을 담당합니다.

인벤토리 GUI

  • 인벤토리 구성은 아래와 같이 만들었습니다.

image

image

  1. Header Area : 인벤토리를 드래그 앤 드롭하여 옮길 수 있는 헤더 UI가 있고, 인벤토리를 닫기 위한 Close 버튼이 있습니다. 여기에 MovableHeaderUI 컴포넌트가 붙습니다.

  2. Content Area : 인벤토리의 실질적인 부분으로 아이템 슬롯들이 위치합니다.

  3. Inventory 게임오브젝트에는 InventoryUI 컴포넌트가 붙습니다.

아이템 슬롯 UI

  • Content Area에 배치할 아이템 슬롯 UI의 구성은 아래와 같이 만들었습니다.

image

image

  1. 아이템 슬롯을 비활성화 해두고, Inventory 클래스에서 필요한 만큼 복제하여 Content Area를 채웁니다.

  2. 아이템 아이콘이 배치될 이미지와 그 안에 아이템 갯수가 표시될 텍스트, 마우스 커서를 올렸을 때 하이라이트 효과를 줄 이미지가 있습니다.

  3. 아이템 슬롯 게임오브젝트에는 ItemSlotUI 컴포넌트가 붙습니다.

  • 이제 인벤토리의 틀이 잡혔고 실질적인 동작과 아이템들의 구현은 다음포스팅에서 이어집니다.

댓글남기기