Unreal Engine: Ultimate Survival Horror Course
아이템 정보 구조체인 S_ItemData Structure를 생성한다.
사용자 정의 구조체를 정의한다.
이름
- String은 Append, Substring 등의 연산이 가능하지만 느리다.
- Name은 대소문자를 구분하지 않고 네트워크에 최적화되어 있으며 속도가 빠르다.
- Text는 말그래도 텍스트를 표시하는데 사용하며 Localization을 할 때 사용한다.
메뉴 상 아이콘
- Texture 2D (Object Reference)
최대 소지 개수
메뉴 상 하나의 슬롯을 의미하는 W_InventorySlot에서 어떤 아이템인지 저장하는 S_ItemData 형식의 ItemData 변수를 생성한다.
S_ItemData 구조체를 저장하는 BP_InventoryItem_Master Actor Blueprint Class를 생성한다.
- 이름, 아이콘, 최대 소지 개수 등 실질적으로 인벤토리 아이템 1개의 정보를 저장한다.
ItemData 변수를 생성한다.
BP_InventoryItem_Master의 자식으로 BP_InventoryItem_FlashlightBattery를 생성한다.
ItemData의 값을 배터리에 맞게 지정해준다.
인벤토리 메뉴에서 어떤 아이템을 몇 개 소지하고 있는지 저장할 S_InventoryItems Structure를 생성한다.
아이템 정보
- BP_InventoryItem_Master (Class Reference)
소지 개수
BPC_Inventory Blueprint Component를 생성한다.
S_InventoryItems (어떤 아이템을 몇 개 소지 중인지 저장)의 Array 형식의 InventorySlots 변수를 생성한다.
BeginPlay에서 HG_PlayerController에 저장된 인벤토리 슬롯의 개수를 가져와 슬롯 크기를 Resize한다.
- RESIZE 노드를 사용하면 배열의 크기를 다시 조정할 수 있다.
빈 슬롯이 있는지 확인하여 성공 여부와 인덱스를 반환하는 CheckForEmptySlot 함수를 생성한다.
- 인벤토리 상 아이템 정보와 소지 개수를 저장하는 S_InventoryItems 구조체의 Item이 None이면 빈 슬롯이라는 의미이다.
Return 노드를 통해 값을 반환할 수 있다.
Pure에 체크하면 실행 핀 없이 값만 반환하는 함수로 만들 수 있다.
Local 변수들은 현재 함수 내에서만 사용할 수 있다.
For Each Loop with Break 노드를 이용해 Break 가능한 Foreach 루프를 실행할 수 있다.
아이템 종류, 개수를 받아 추가 성공 여부를 반환하는 AddItem 함수를 생성한다.
- Item: BP_InventoryItem_Master (Class Reference)
Get Class Defaults 노드로 클래스 변수에 설정된 기본값을 가져올 수 있다.
Set Array Item 노드로 배열 원소에 값을 설정할 수 있다.
Make ... 노드로 Break의 역연산을 할 수 있다.
L1_Character에 BPC_Inventory 컴포넌트를 추가한다.
월드에 배치될 아이템으로 사용할 BP_PickupActor_Master Actor Blueprint Class를 생성한다.
아이템 정보를 저장하는 BP_InventoryItem_Master 형식의 Item 변수와 개수를 저장하는 Amount 변수를 생성한다.
Sphere Collision을 추가해서 오버랩을 처리하도록 한다.
- On Component Begin Overlap 이벤트로 오버랩 시 아이템을 획득할 수 있도록 한다.
Cast to ... 노드는 성공했을 경우와 실패했을 경우를 다른 실행 흐름으로 지정 가능하다.
- 아래의 경우 L1_Character로 캐스팅이 불가능하면 아무것도 실행되지 않는다.
DestroyActor 노드를 이용해 액터를 삭제할 수 있다.
BP_PickupActor_Master의 자식으로 BP_PickupActor_FlashlightBattery 배터리 액터를 만든다.
메쉬와 머티리얼을 설정해준다.
아이템 정보 변수 Item에 BP_InventoryItem_FlashlightBattery를 지정해주고 개수 Amount를 1로 설정한다.
L1_Character에 DEBUG용 노드를 만들어 임시로 인벤토리 정보를 출력하도록 한다.
Get Display Name 노드를 활용해 클래스의 이름을 문자열로 가져올 수 있다.
Append 노드로 문자열을 붙일 수 있다.
Select String 노드를 활용해 조건에 따라 다른 문자열을 선택할 수 있다.
획득 가능한 아이템 제작 및 인벤토리 연동에 성공했다.
'Unreal Engine > Ultimate Survival Horror Course' 카테고리의 다른 글
인벤토리에 복수 아이템 추가하기 (0) | 2023.02.03 |
---|---|
인벤토리 아이콘 갱신하기 (0) | 2023.02.03 |
인벤토리 메뉴 만들기 (0) | 2023.02.01 |
인벤토리 그리드, 슬롯 만들기 (0) | 2023.01.31 |
커스텀 폰트 사용하기 (0) | 2023.01.30 |