UE 5 스터디/Gameplay Ability System(GAS)

27-1. 상위 스펠 - (1) FireBlast - 화염 폭발 어빌리티, 코스트 & 쿨다운

Crat3 2025. 3. 31. 15:07

0. 개요

파이어볼트의 상위 스펠로 화염 폭발 스펠을 만든다.

 

 

1. 화염 폭발

스킬 트리 내에서 파이어볼트를 찍어야 다음으로 찍을 수 있는 화염 폭팔 스펠을 만든다.

 

(1) AuraDamageGameplayAbility를 상속받는 AuraFireBlast 클래스 생성

#pragma once

#include "CoreMinimal.h"
#include "AbilitySystem/Abilities/AuraDamageGameplayAbility.h"
#include "AuraFireBlast.generated.h"

UCLASS()
class AURA_API UAuraFireBlast : public UAuraDamageGameplayAbility
{
	GENERATED_BODY()
	
public:
	virtual FString GetDescription(int32 Level) override;
	virtual FString GetNextLevelDescription(int32 Level) override;

protected:
	UPROPERTY(EditDefaultsOnly, Category = "FireBlast")
	int32 NumFireBalls = 12;
};
#include "AbilitySystem/Abilities/AuraFireBlast.h"

FString UAuraFireBlast::GetDescription(int32 Level)
{
	const int32 ScaledDamage = Damage.GetValueAtLevel(Level);
	const float ManaCost = FMath::Abs(GetManaCost(Level));
	const float Cooldown = GetCoolDown(Level);

	return FString::Printf(TEXT(
		"<Title>화염 폭발</>\n<Small>레벨 </><Level>%d</>\n<Small>마나 </><ManaCost>%.1f</>\n<Small>쿨타임 </><Cooldown>%.1f</>\n<Default>지정한 범위 내에 %d의 화염구를 소환하여 </><Damage>%d</><Default>의 방사형 피해를 입히는 화염 폭풍을 소환합니다. 일정 확률로 적에게 화상을 입힙니다.</>"),
		Level,
		ManaCost,
		Cooldown,
		NumFireBalls,
		ScaledDamage
	);
}

FString UAuraFireBlast::GetNextLevelDescription(int32 Level)
{
	return GetDescription(Level);
}

화염 폭발 스펠은 일정 범위에 방사형 데미지를 입히고, 사방으로 퍼지는 파이어볼트를 소환한다.

 

 

(2) Native 게임플레이 태그 생성

	FGameplayTag Abilities_Fire_FireBlast;
	GameplayTags.Abilities_Fire_FireBlast = UGameplayTagsManager::Get().AddNativeGameplayTag(
		FName("Abilities.Fire.FireBlast"),
		FString("FireBlast Ability")
	);

 

 

(3) DA_AbilityInfo에 어빌리티 정보 생성

 

 

(3) WBP_OffensiveSpellTree에서 글로브에 화염 폭발 태그 할당

 

 

(4) GA_FireBlast 블루프린트 클래스 생성

- Damage Effect Class : GE_Damage

- Damage Type : Damage.Fire

- Ability Tags : Abilities.Fire.FireBlast

 

 

2. 어빌리티에 코스트 적용

(1) CT_SpellCost에 화염 폭발 코스트 커브 설정

 

 

(2) 코스트 게임플레이 이펙트 생성

 

 

(3) 어빌리티에 코스트 적용

GA_FireBlast의 클래스 디폴트에서 코스트 클래스를 지정한다.

CommitAbilityCost를 사용하여 어빌리티가 코스트를 사용하게 한다.

 

 

3. 어빌리티에 쿨다운 적용

(1) 쿨다운 게임플레이 어빌리티 생성

 

(2) 쿨다운 태그 생성

쿨타임을 UI 등에서 사용하기 위해 새로운 쿨다운 태그를 생성한다.

 

 

(3) 이벤트 그래프

Commit Ability Cost와 Commit Ability Cooldown 함수를 같이 실행하는 노드이다.

 

 

(4) DA_AbilityInfo에서 쿨다운 태그 지정

이제 스펠 사용 후 어빌리티의 쿨다운이 오버레이에 정상적으로 표시되는지 확인한다.