0. 개요
이전 포스트에서 피격시 반응하는 몽타주를 재생하도록 게임플레이 이펙트와 어빌리티를 생성했다.
이제 특정 상황에서 해당 어빌리티를 활성화한다.
1. 게임플레이 어빌리티 부여 및 활성화
(1) 게임플레이 어빌리티 부여 - CharacterClassInfo
모든 적에 대해서 동일한 게임플레이 어빌리티를 부여하기 위해서 CharacterClassInfo를 사용한다.
UPROPERTY(EditDefaultsOnly, Category = "Common Class Defaults")
TArray<TSubclassOf<UGameplayAbility>> CommonAbilities;
(2) Aura 게임플레이 블루프린트 라이브러리
몬스터에 대해 초기 어빌리티를 부여하는 함수를 라이브러리에 구현한다.
UFUNCTION(BlueprintCallable, category = "AuraAbilitySystemLibrary|CharacterClassDefaults")
static void GiveStartupAbilities(const UObject* WorldContextObject, UAbilitySystemComponent* ASC);
};
void UAuraAbilitySystemLibrary::GiveStartupAbilities(const UObject* WorldContextObject, UAbilitySystemComponent* ASC)
{
AAuraGameModeBase* AuraGameMode = Cast<AAuraGameModeBase>(UGameplayStatics::GetGameMode(WorldContextObject));
if (AuraGameMode == nullptr)
return;
UCharacterClassInfo* CharacterClassInfo = AuraGameMode->CharacterClassInfo;
for (TSubclassOf<UGameplayAbility> AbilityClass : CharacterClassInfo->CommonAbilities)
{
FGameplayAbilitySpec AbilitySpec = FGameplayAbilitySpec(AbilityClass, 1);
ASC->GiveAbility(AbilitySpec);
}
}
(3) 어빌리티 부여 - AuraEnemy
void AAuraEnemy::BeginPlay()
{
Super::BeginPlay();
GetCharacterMovement()->MaxWalkSpeed = bHitReacting ? 0.f : BaseWalkSpeed;
InitAbilityActorInfo();
UAuraAbilitySystemLibrary::GiveStartupAbilities(this, AbilitySystemComponent);
(4) 어빌리티 활성화 - AuraAttributeSet
if (LocalIncomingDamage > 0.f)
{
const float NewHealth = GetHealth() - LocalIncomingDamage;
SetHealth(FMath::Clamp(NewHealth, 0, GetMaxHealth()));
const bool bFatal = NewHealth <= 0.f;
if (!bFatal)
{
FGameplayTagContainer TagContainer;
TagContainer.AddTag(FAuraGameplayTags::Get().Effects_HitReact);
// 부여된 어빌리티를 찾아서 활성화
Props.TargetASC->TryActivateAbilitiesByTag(TagContainer);
}
}
(5) 데이터 에셋에 몬스터 공통 어빌리티 추가
(6) 어빌리티에 태그 추가, 인스턴스 정책 변경
인스턴스 정책을 Instanced Per Actor로 변경하여 어빌리티가 작동할 때마다 인스턴스를 생성하지 않고 하나의 인스턴스만 사용하여 성능 향상을 도모할 수 있다.
(7) 몽타주 종료 후 이펙트 제거 및 어빌리티 종료
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
11-7. 몬스터 - (4) 시체에 디졸브 효과 추가하기 (0) | 2024.12.18 |
---|---|
11-6. 몬스터 - (3) 죽음 구현 (0) | 2024.12.18 |
11-4. 몬스터 - (1) 피격에 대한 반응 - 게임플레이 어빌리티 생성 (0) | 2024.12.18 |
11-3. 게임플레이 어빌리티 - (4) 어빌리티 레벨에 따른 데미지 적용 (0) | 2024.12.18 |
11-2. 게임플레이 이펙트 - (7) 호출자에 의한 크기 계산(Set By Caller Magnitude) - 데미지 계산 (1) | 2024.12.18 |