UENUM, USTRCUT, UCLASS 등을 리맵핑
이름 변경할 때 주로 사용했다..
DefaultEngine.ini에 작성하면 된다
강의에서는 LyraAnimInstance 대신 HakAnimInstance 사용하려고 씀
참고: 언리얼 엔진의 코어 리디렉트 | 언리얼 엔진 5.6 문서 | Epic Developer Community


앞서 Cosmetic에서 봤던 FLyraAnimBodyStyleSelectionSet, FLyraAnimBodyStyleSelectionEntry과 유사

B_WeaponInstance_Base 상속

B_WeaponInstance_Pistol를 장착하면 ABP_PistolAnimLayers_Feminine이 장착될 것
어떻게 장착되는지는 인벤토리에서 설명~
Instanced.. 추후 설명

LyraInventoryItemDefinition의 Fragment를 ItemInstance를 통해 가져올 수 있다


정리하면 LyraInventoryManagerComponent은 ULyraInventoryItemInstance리스트를 들고 있다






퀵바가 뭔가 했는데 퀵슬롯이네



GameFeatureData인 ShooterCore에서 코스메틱시스템에서와 마찬가지로 AddComponent 액션으로
1. LyraPlayerController에 LyraInventoryManagerComponent 부착
2. LyraCharacter에 LyraEquipmentManagerComponent 부착


ExperienceActionSet 만들어서 또 AddComponent로 컨트롤러에 B_QuickBarComponent 부착
퀵바는 Experience에 따라 안붙이고 싶기도 하고 그런가보다
LyraQuickBarComponent 상속
Experience가 로드됐는지를 확인하는 클래스
BlueprintAsyncActionBase를 상속
UASyncAction_ExperienceReady::Active

GameState가 있는지 확인, 있으면 step2 아니면 GameState가 로드됐을 때 step 1로
step1에서 step2 호출한다.

step 2: Experience가 로드되었는지 확인, 되었으면 step4. 아니면 로드됐을 때 step3으로
step3에서 step4 호출
주석이 많은데.. 정리하자면 아이템을 장착하면 메시의 AnimLayer를 변경하니까, 메시가 없는 상태에서는 아이템을 장착할 수 없게 해야 한다
Experience가 로드되는 시점은 메시가 없는 상태이기 때문에 최소 한 틱 뒤로 미뤄줘야 한다는 듯

step4: 바인드했던 함수 호출하고 destroy

UASyncAction_ExperienceReady을 사용하려면.. BP에서 WaitForExpeiennceReady를 호출해서 World에 이 액션을 등록해야 한다

이렇게 UASyncAction_ExperienceReady를 등록했기 때문에 Possess의 다음 틱에 AddInitialInvnetory가 호출된다

InventoryManagerComponent에서는 InventoryList에 ItemDefinition을 추가하기만 한다
InventoryList에서는 ItemDefinition으로 ItemInstnace를 생성한다
InitialInventoryItems: 미리 만들어둔 ItemDefinition 리스트
여기서는 ID_Pistol을 추가해둠

ID_Pistol
EquippableItem을 Fragment로 해서 WID_Pistol을 연결한다


WID_Pistol
LyraEquipmentDefinition


InventoryManagerComponent에서는 InventoryList에 ItemDefinition을 추가하기만 한다
(>InventoryList에서 ItemDefinition으로 ItemInstnace를 생성한다)
QuickbarComponent에 InventoryList에서 생성한 ItemInstance를 추가한다
ULyraQuickbarComponent::SetActiveSlotIndex: 기존에 장착하고 있던 걸 해제하고, 새롭게 활성화할 인덱스의 아이템을 장착. 이때 해제/장착은 EquipmentManagerComponent를 통해 한다

LyraEquipmentManagerComponent에서 아이템 장착/해제
EquipmentInstnace를 EquipmentList에 추가/삭제하면서 EquiopmentInstnace에서 OnEquipped/OnUnequipped를 호출하고 있다
장착 해제


장착



여기까지하면 캐릭터에 아이템 장착까지는 완료
B_WeaponInstance_Base

B_Hero_ShooterMannequin에서 AnimClass를 설정해주면 Pistol에 애니메이션이 적용된다

캐릭터에도 애니메이션을 적용하려면 B_Manny에도 AnimClass를 설정한다

여기서 ABP_Mannequin_CopyPose는 부모의 메시를 그대로 가져와서 적용한다
즉 Pistol과 B_Manny 모두 B_Hero_ShooterMannequin의 스켈레탈 메시인 SKM_Manny_Invisible을 따라 애니메이션이 적용된다는 것이다