< Ability에 필요한 기능 >
4. 부착된 무기에 따라 InputMappingContext 변경 ✔
5. 부착된 무기에 따라 애니메이션 변경 ✔

🎮 UBFPlayerAnimInstance.h
UCLASS() class BOSSFIGHT_API UBFPlayerAnimInstance : public UBFCharacterAnimInstance { // 중략 UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = "Anim Data | Refrence") bool bIsEquipWeapon; };🎮 UBFPlayerAnimInstance.cpp
void UBFPlayerAnimInstance::NativeThreadSafeUpdateAnimation(float DeltaSeconds) { Super::NativeThreadSafeUpdateAnimation(DeltaSeconds); if (OwningPlayerCharacter) { bIsEquipWeapon = UBFFunctionLibrary::NativeDoseActorHaveTag(OwningPlayerCharacter, BFGameplayTag::Player_WeaponEquip); } }위와같이 bIsEquipWeapon변수를 추가하여 Tag를 검사해 무기를 장착 중인지 확인 할 수 있게 하였다.
🎮 UPlayerEquipmentComponent.cpp
void UPlayerEquipmentComponent::RegisterWeapon(AWeaponBase* NewWeapon) { Super::RegisterWeapon(NewWeapon); UBFFunctionLibrary::AddGameplayTagToActorIfNone(GetOwner(), BFGameplayTag::Player_WeaponEquip); }기존의 PawnEquipmentComponent의 RegisterWeapon을 가상 함수로 변경하고 PlayerEquipmentComponent에서 override하는 것으로 구현 하였다.



🎮 UPawnEquipmentComponent.cpp
void UPawnEquipmentComponent::RegisterWeapon(TArray<AWeaponBase*> NewWeapon) { if (!CurrentWeaponMap.IsEmpty()) { for (TPair Pair : CurrentWeaponMap) { Pair.Value->Destroy(); } CurrentWeaponMap.Empty(); } for (AWeaponBase* Weapon : NewWeapon) { CurrentWeaponMap.Add(Weapon->GetWeaponType(), Weapon); } }🎮 GA_WeaponSeleted_Base
매개변수를 AWeaponBase의 배열로 받게하였고, Ability에서 무기 Spawn과 등록 및 부착을 분리 하였다.
이제부터 무기를 스폰하고 로컬 변수(배열)에 저장, 이후 등록절차를 진행하고, 등록시 EquipmentComponent의 TMap에 있는 Value에 해당하는 객체를Destroy 및 TMap을 비워 주고, 현재 무기들을 추가, 이후 부착으로 진행 되도록 구현 하였다.
