🎮 UEnemyEquipmentComponent.cpp
for (AWeaponBase* Weapon : NewWeapon) { if (CurrentWeaponMap.Contains(Weapon->GetEquipType())) { continue; } CurrentWeaponMap.Add(Weapon->GetEquipType(), Weapon); } }현재로서는 단순히 들어온 NewWeapon배열을 등록 해주기만 하면 된다. 이때 이미 같은 부위에 무기가 장착 되어 있으면 continue를 통해 넘어가도록 하여, 중복으로 부착되는 것을 막아주자.



🎮 UDataAsset_StartUpEnemy.h
class UBFEnemyAbility; UCLASS() class BOSSFIGHT_API UDataAsset_StartUpEnemy : public UDataAsset_StartUpBase { GENERATED_BODY() public: virtual void GiveToAbilitySystemComponent(UBFAbilitySystemComponent* InASCToGive, int32 ApplyLevel = 1) override; private: UPROPERTY(EditDefaultsOnly, Category = "StartUpData") TArray<TSubclassOf<UBFEnemyAbility>> EnemyAbilities; };🎮 UDataAsset_StartUpEnemy.cpp
void UDataAsset_StartUpEnemy::GiveToAbilitySystemComponent(UBFAbilitySystemComponent* InASCToGive, int32 ApplyLevel) { Super::GiveToAbilitySystemComponent(InASCToGive, ApplyLevel); for (TSubclassOf<UBFEnemyAbility>& EnemyAbility : EnemyAbilities) { if (!IsValid(EnemyAbility)) { continue; } FGameplayAbilitySpec AbilitySpec(EnemyAbility); AbilitySpec.SourceObject = InASCToGive->GetAvatarActor(); AbilitySpec.Level = ApplyLevel; InASCToGive->GiveAbility(AbilitySpec); } }적 캐릭터가 사용할 EnemyAbility인 EnemyAbilities 배열을 추가하고, GiveToAbilitySystemComponent() 함수를 Override하였다. 해당 함수에서는 배열안의 EnemyAbility를 부여하는 기능만 추가하였다.
🎮 ABFEnemyCharacter.cpp
void ABFEnemyCharacter::PossessedBy(AController* NewController) { Super::PossessedBy(NewController); if (!CharacterStartUpData.IsNull()) { if (UDataAsset_StartUpBase* LodedData = CharacterStartUpData.LoadSynchronous()) { LodedData->GiveToAbilitySystemComponent(BFAbilitySystemComponent); } } }위와같이 PossessedBy()함수에서 DataAsset을 동기로딩 하여 부여 해주도록 구현 하였다.
