언리얼에서 지원하는 카오스 Destruction에 대해 며칠 공부하다가 개발하는 게임에는 맞지 않는 것 같아서 쓰지 않기로 하였다.
아이템을 습득하고 얻은 아이템을 보여주는 인벤토리를 구현해 볼 것이다.

열거형을 만들고 위와같이 3가지 아이템 타입의 이름을 정한다.

구조체 S_Slot을 만들고 3가지 변수를 만든다.

구조체 S_Item을 만들고 위와 같이 변수를 추가하였다.

구조체 S_AllItem을 만들고 위와 같이 변수를 추가하였다.
S_Slot 배열형식으로 저장하여 S_AllItem은 플레이어가 가지는 아이템 목록이 될 것이다.
좀 복잡한데 정리하면 S_AllItem가 제일 상위로서 플레이어가 소지한 전체 인벤토리 아이템이다.
S_AllItem은 각각 S_Slot 배열형식으로 변수를 가지게 되므로 Objects, Eatables, Equipments 세 가지의 배열을 가지게 된다.

데이터 테이블을 만들고 위와 같이 정보를 입력한다.

아이템 블프를 만들고 위와 같이 S Slot 변수를 추가하고 편집가능하게 한다.
위와 같이 각 아이템의 정보를 바꾸면 위의 데이터 테이블에서 지정한 Static Mesh가 자동으로 들어가도록 한다.

상호작용 가능한 물체에 접근하면 키가 보이도록 위와 같이 위젯을 간단히 만들었다.

BP 플레이어에서 매 틱마다 Trace하여 BP_Item에 캐스트하고 Valid하면 위의 위젯이 보이도록 하였다.

BPC 인벤토리에서 Add to Inventory 함수를 만들었다.

자세히 보면 각 배열에서 정보를 For Each Loop로 불러와서 상호작용한 아이템과 기존에 플레이어가 가지고있는 아이템을 비교하여 같은 경우 둘의 수를 합친다.
같지 않은 경우는 아래로 노드를 만들어서 새 아이템으로 추가한다.
배열이 총 Objects, Eatables, Equipments 3가지이므로 총 3개를 만든다.

플레이어 E키 상호작용에 BP_Item 캐스트를 추가하여 아이템일 경우 Add to Inventory 함수를 동작시킨다.
이후 액터를 파괴하여 없앤다.

위와 같이 BP_Item에서 오른쪽 디테일창에서 각 아이템을 설정 가능하다.
사과와 바나나는 Eatables로 할당했고 무기는 Equipments에 할당하였다.
위와 같이 상호작용 위젯이 잘 뜨고 E키를 눌러서 먹으면 사라지고 배열에 잘 추가되는 것을 볼 수 있다.

다음으로 WBP 인벤토리에서 Update Items in Inventory UI 함수를 추가하여 위와같이 구성하였다.
Slot 위젯을 현재 가지고 있는 아이템 정보를 Slot 위젯에 보내어 맞게 추가하는 과정이다.
여기서 버그가 좀 있었는데 정보를 보내도 Slot 위젯에서 None으로 읽혀서 해결방법을 찾는데 좀 걸렸다.
언리얼 해외 사이트쪽도 뒤져보니 같은 사례를 발견했고 버그가 맞는 것 같다.
임시방편으로 인벤토리 창을 열때 Update Items in Inventory UI 를 동작시켜 해결하였다.

인벤토리는 위와 같이 구성하였다.

각 이미지에 호버시와 비호버시 색이 바뀌도록 설정한다.

3가지 이미지 모두 동일하게 작업해 주었다.

인벤토리 각 설정아래에 들어가는 Slot 위젯이다.
디자인은 위와 같이 정사각형으로 구성하였다.

변수로 Item을 받아와서 받아온 Item 정보에서 Quantity와 이름을 가져와 위젯에 할당한다.
Quantity가 0인 경우(아이템이 없는 경우) Set Visibility로 Hidden으로 한다.

호버시 아이템 창이 보이고 비호버시 아이템 창이 숨겨지도록 하였다.

아이템 창 정보 위젯 디자인이다.
간단히 아이템 이름과 설명 텍스트로 구성하였다.

Update Item Info 함수를 만들어서 아이템의 정보를 받아와 아이템 이름과 설명을 텍스트로 넣는다.
I를 눌러 인벤토리를 열기, 아이템을 얻어서 인벤토리에 순서대로 정리, 마우스를 올렸을 때 아이템 설명창까지 잘 구현되는 것을 볼 수 있다.
'언리얼 - 게임 개발' 카테고리의 다른 글
첫 게임 개발 (33) _ 체크포인트와 리스폰 구현 (0) | 2024.09.01 |
---|---|
첫 게임 개발 (32) _ 아이템 사용시 물체와 상호작용 (1) | 2024.09.01 |
첫 게임 개발 (30) _ 숨겨진 장소 만들기 (0) | 2024.08.23 |
첫 게임 개발 (29) _ 대화 시스템 추가 및 간단한 컷씬 구현 (0) | 2024.08.21 |
첫 게임 개발 (28) _ 대화 선택지 구현 (0) | 2024.08.20 |