1. 공격 게임플레이 어빌리티
(1) 게임플레이 어빌리티 생성
#pragma once
#include "CoreMinimal.h"
#include "AbilitySystem/Abilities/AuraDamageGameplayAbility.h"
#include "AuraMeleeAttack.generated.h"
UCLASS()
class AURA_API UAuraMeleeAttack : public UAuraDamageGameplayAbility
{
GENERATED_BODY()
};
(2) Native 게임플레이 태그 생성
// 어빌리티
FGameplayTag Abilities_Attack;
// 어빌리티
GameplayTags.Abilities_Attack = UGameplayTagsManager::Get().AddNativeGameplayTag(
FName("Abilities.Attack"),
FString("공격 어빌리티")
);
(3) CharacterClassInfo에서 기본 어빌리티 부여
USTRUCT(BlueprintType)
struct FCharacterClassDefaultInfo
{
GENERATED_BODY()
// 1차 속성의 기본값을 적용하는 게임플레이 이펙트 - 공통
UPROPERTY(EditDefaultsOnly, Category="Class Defaults")
TSubclassOf<UGameplayEffect> PrimaryAttributes;
// 기본 어빌리티
UPROPERTY(EditDefaultsOnly, Category = "Class Defaults")
TArray<TSubclassOf<UGameplayAbility>> StartupAbilities;
};
(4) 어빌리티 시스템 라이브러리의 GiveStartUpAbilities 리펙토링
이제 이 함수가 몬스터의 특성(워리어, 마법, 궁수)에 따라서 초기 어빌리티를 부여하도록 설정한다.
UFUNCTION(BlueprintCallable, category = "AuraAbilitySystemLibrary|CharacterClassDefaults")
static void GiveStartupAbilities(const UObject* WorldContextObject, UAbilitySystemComponent* ASC, ECharacterClass CharacterClass);
void UAuraAbilitySystemLibrary::GiveStartupAbilities(const UObject* WorldContextObject, UAbilitySystemComponent* ASC, ECharacterClass CharacterClass)
{
UCharacterClassInfo* CharacterClassInfo = GetCharacterClassInfo(WorldContextObject);
if (CharacterClassInfo == nullptr)
return;
for (TSubclassOf<UGameplayAbility> AbilityClass : CharacterClassInfo->CommonAbilities)
{
FGameplayAbilitySpec AbilitySpec = FGameplayAbilitySpec(AbilityClass, 1);
ASC->GiveAbility(AbilitySpec);
}
// 캐릭터 특성에 따른 어빌리티 부여
const FCharacterClassDefaultInfo& DefaultInfo = CharacterClassInfo->GetClassDefaultInfo(CharacterClass);
for (auto& AbilityClass : DefaultInfo.StartupAbilities)
{
ICombatInterface* CombatInterface = Cast<ICombatInterface>(ASC->GetAvatarActor());
if (CombatInterface)
{
FGameplayAbilitySpec AbilitySpec = FGameplayAbilitySpec(AbilityClass, CombatInterface->GetPlayerLevel());
ASC->GiveAbility(AbilitySpec);
}
}
}
어빌리티의 수준을 몬스터의 레벨에 따라 부여하기 위해 전투 인터페이스를 캐스팅하여 사용한다.
2. 공격 게임플레이 어빌리티 블루프린트
(1) 블루프린트 생성
새롭게 생성한 C++ 게임플레이 어빌리티를 상속받는 블루프린트 GA_MeleeAttack을 생성한다.
해당 태그를 받으면 어빌리티가 작동하도록 설정한다.
(2) DA_CharacterClassInfo에서 초기 어빌리티 지정
(3) BTT_Atack 비헤이비어 트리 태스크 수정
태스크가 시작되면 ASC를 가져와 태그로 어빌리티를 활성화 시도를 한다.
이 때, 태그는 멤버변수로 만들고 기본값으로 Abilities.Attack을 설정한다.
(4) GA_Attack 어빌리티로 디버그 구체 그리기
어빌리티가 활성화되면 아바타 액터의 위치를 가져와 디버그 구체를 그린다.
인스턴싱 정책을 액터마다 인스턴스로 설정하면 하나의 인스턴스를 사용한다.
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
14-3. AI 근거리 공격 - (3) 공격 몽타주와 게임플레이 이벤트 (1) | 2024.12.30 |
---|---|
14-2. AI 근거리 공격 - (2) 공격 몽타주, 모션 워핑 (0) | 2024.12.30 |
13-10. AI - (8) 원거리 몬스터 - 비헤이비어 트리에 EQS 활용하기 (0) | 2024.12.27 |
13-9. 인바이런먼트 쿼리 시스템(EQS) - (2) 거리에 따른 가중치 테스트 (0) | 2024.12.27 |
13-8. 인바이런먼트 쿼리 시스템(EQS) - (1) EQS 구성 및 테스트 (0) | 2024.12.27 |