[개발일지] 이환 모작_04 Inventory 기능과 Item UI 구현

2026. 5. 20. 18:10·Unreal Project/이환 모작 포토폴리오 개발일지

이번에 추가한 기능은 바로 Inventory 기능 및 Item Ui  입니다. 

 

개발 과정에서 발견한 문제점 및 개선

우선 이제까지 생각했던 설계가 다음과 같은 문제가 발생하여 잘못되었음을 판단했습니다.  

구조 설계 변경

항목  구버전(Khazan Project) 신버전(Neverness)
InventoryComponent 위치 KZCharacterPlayer에 직접 부착 IHPlayerState에 부착 
데이터 생존성 Character 사망 시 소멸 PlayerState는 살아있으므로 유지
UI 생성 관리 PlayerController의 BeginPlay()에서 생성 HUD가 MainUiWidget 생성
인벤토리 열기 흐름 Character의 내부에서 처리 Character->Controller->HUD->UIWidget흐름으로 인벤토리 처리
PlayerController 역할 IMC 생성 및 UI Widget 생성 UI 열기/닫기 및 InputMode변경,
MouseCusror 제어
HUD 역할 없음 PlayerUIWidget 생성 및 OpenInventoryWidget() 담당
슬롯 초기화 매번 생성 방식 Init_Slot()으로 미리 5x5 = 20개 생성
UI 업데이트 방식 전체 재생성 SlotArray 인덱스로 데이터만 교체

 

 

 

구현 결과

구현 영상

 

 

 

 

 

기능 구현 순서

 

기능 구현 순서는 다음과 같습니다.

 

1. Item Actor와 다른 Actor가 충돌했을 때, 먼저 ActorHasTag를 사용하여 충돌한 대상이 Player인지 확인했습니다. 

    이후 Player의 PlayerState에 접근하기 위해 OtherActor를 APawn 으로 Cast 하였습니다.

   

    Cast가 완료되면 Pawn이 가지고 있는 PlayerState를 가져오고, PlayerState 내부에서 관리 중인 

    InventoryComponent에 접근하여 아이템을 추가하는 방식으로 구현했습니다. 

Item 획득 및 Inventory에 추가

 

DataTable을 활용한 아이템 데이터 관리

Data Table

아이템의 이름, 설명, 이미지, 최대 중첩 개수, 아이템 타입과 같은 속성들은 DataTable 을 사용하여 관리 했습니다.

이를 통해 아이템 데이터를 코드에 직접 작성하지 않고 에디터에서 수정할 수 있으며, 새로운 아이템이 추가되더라도 DataTable에 Row를 추가하는 방식으로 쉽게 확장할 수 있게 구현했습니다. 

 

아이템 획득 시에는 RowName을 기준으로 인벤토리에 아이템을 추가하고, 이후 UI에서는 해당 RowName을 통해 DataTable의

정보를 참조하여 아이템 정보를 표시하도록 구성했습니다. 

 

2. Item, Inventory UI 구현 

인벤토리 UI 창(왼쪽), 인벤토리 Slot 창 (오른쪽)

 

게임 상 인벤토리 UI 구현 모습

 

인벤토리의 UI는 단순히 슬롯을 화면에 배치하는 것 뿐만 아니라, 실제 인벤토리 데이터와 연결되어야 했습니다. 

 

처음에는 슬롯마다 직접 이미지를 넣는 방식도 생각했지만, 이 방식은 아이템이 추가되거나 변경될 때 마다

UI를 직접 수정해야 하므로 유지보수에 좋지 않다고 판단했습니다.

 

그래서 인벤토리 UI는 아이템 데이터를 직접 소유하기 보다는, 인벤토리 컴포넌트가 가지고 있는 데이터를 읽어와 

표시하는 역할을 담당하도록 했습니다. 

Data Table 기반 Item Slot 연동

 

개발 중 겪은 문제점과 학습한 내용

 

인벤토리 슬롯과 아이템 획득 기능을 구현하면서 단순히 아이템을 추가하는 것뿐만 아니라, 아이템 데이터를 어디서 관리할지, UI 슬롯과 어떻게 연동할지, PlayerState와 Component 구조를 어떻게 나눌지에 대해 여러 고민이 있었습니다.

처음에는 기능이 동작하는 것에만 집중했지만, 구현을 진행하면서 데이터 관리 방식과 클래스 간 역할 분리가 중요하다는 것을 느끼게 되었습니다.

1. PlayerState 접근 방식에 대한 이해 부족

아이템 Actor에서 플레이어의 인벤토리에 접근하기 위해 PlayerState를 가져와야 했습니다.

 

하지만 처음에는 일반 Actor에서 바로 GetPlayerState()를 호출하려고 했고, 이 과정에서 nullptr이 발생했습니다.

GetPlayerState()는 기본적으로 APawn 또는 AController 쪽에서 접근하는 함수이기 때문에, 아이템 Actor에서 바로 사용할 수 있는 구조가 아니었습니다.

 

그래서 충돌한 OtherActor를 먼저 APawn으로 캐스팅한 뒤, 해당 Pawn을 통해 PlayerState를 가져오는 방식으로 수정했습니다.

Player State 접근 방식

 

2. 아이템 데이터를 코드가 아닌 DataTable로 관리

처음에는 아이템 이름이나 이미지 같은 정보를 코드에서 직접 설정하는 방식도 생각했습니다.

하지만 아이템 종류가 늘어날수록 코드가 복잡해지고, 새로운 아이템을 추가할 때마다 C++ 코드를 수정해야 하는 문제가 생길 수 있다고 판단했습니다.

그래서 아이템의 이름, 설명, 이미지, 최대 중첩 개수, 아이템 타입과 같은 정보는 DataTable을 통해 관리하도록 변경했습니다.

이 방식으로 구현하면 코드에서는 RowName만 기준으로 아이템을 구분하고, 실제 아이템 정보는 DataTable에서 가져올 수 있습니다.

Data Table을 활용한 Item 관리

 

 

 

마무리

이번 작업에서는 아이템 획득부터 인벤토리 데이터 저장, 슬롯, UI 표시까지 이어지는 기본적인 인벤토리 시스템을 구현했습니다.

구현 과정에서 가장 중요하게 생각한 부분은 아이템 데이터, 인벤토리 로직, UI 표시를 각각 분리하는 것이 있었습니다. 

 

이를 통해 아이템이 추가되더라도 DataTable을 수정하는 방식으로 확장할 수 있고, 인벤토리 UI 역시 데이터 기반으로 갱신할 수 있는 구조를 만들 수 있었습니다.

 

아직 아이템 사용,장착,버리기,슬롯 이동 같은 기능은 추가되지 않았지만, 이번 구조를 기반으로 이후 기능들을 확장해 나갈 수 있을 것 같습니다. 

 

 

'Unreal Project > 이환 모작 포토폴리오 개발일지' 카테고리의 다른 글

[개발일지] 이환 모작_03 Stamina Animation 및 InterAction Ui 구현  (0) 2026.05.14
[개발일지] 이환 모작_02 ( Hp Bar Widget )  (0) 2026.05.08
[개발일지] 이환 모작_01 ( Character, GameMode, PlayerController)  (2) 2026.04.30
'Unreal Project/이환 모작 포토폴리오 개발일지' 카테고리의 다른 글
  • [개발일지] 이환 모작_03 Stamina Animation 및 InterAction Ui 구현
  • [개발일지] 이환 모작_02 ( Hp Bar Widget )
  • [개발일지] 이환 모작_01 ( Character, GameMode, PlayerController)
seonhwan2547
seonhwan2547
seonhwan2547 님의 블로그 입니다.
  • seonhwan2547
    seonhwan2547 님의 블로그
    seonhwan2547
  • 전체
    오늘
    어제
    • 분류 전체보기 (98) N
      • Unreal Project (33)
        • Khazan 모작 프로젝트 (4)
        • Unreal Study (10)
        • Blueprint (6)
        • C++ (6)
        • Shader (0)
        • GAS (2)
        • 이환 모작 포토폴리오 개발일지 (4)
        • Listen Server (1)
      • Directx11 Project (11)
        • Thymesia 팀 프로젝트 (8)
        • Kaku Ancient Seal 개인 프로젝트 (2)
        • Thymesia Animation Tool 개발 (0)
      • Algorithm (6)
        • Binary_Search (2)
        • Greedy (1)
        • Dynamic Programming (1)
        • A-star (1)
      • Coding Test (31)
        • Brutal Force (2)
        • Sort (5)
        • DFS (3)
        • Binary_Search (4)
        • BFS (6)
        • Hash (2)
        • Dynamic Programming (6)
        • Greedy (1)
        • BackTracking (1)
        • Binary_Tree (1)
      • STL Container (1)
        • unorded_set (0)
        • priority_queue (1)
      • C++ 공부 및 몰랐던점 (8)
        • Smart pointer (1)
      • Visual Studio 설정관련 공부 (1)
      • Console Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 블로그 소개
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    UnrealEnigne
    C++
    blueprint
    UI
    CodingTest
    Unreal
    GameProgramming
    Unreal Engine
    Game Programming
    server
    hash
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
seonhwan2547
[개발일지] 이환 모작_04 Inventory 기능과 Item UI 구현