0. 개요
어빌리티가 데미지를 부여하는 방법에는 여러가지가 있다.
데미지를 주는 어빌리티를 상속받는 스킬(어빌리티)를 생성하는 방법도 있으나, 편의를 위해 프로젝트의 어빌리티 클래스의 부모인 AuraGameplayAbility에 일괄적으로 데미지를 주도록 설정한다.
(데미지를 주지 않는 스킬(어빌리티)는 데미지 태그를 넘기지 않거나 0의 데미지를 부여하는 방법도 있다)
1. 어빌리티 데미지
(1) Scalable Float 타입 데미지 - AuraGameplayAbility
어빌리티의 레벨에 따라 데미지가 변동하도록 지정할 것이다.
UCLASS()
class AURA_API UAuraGameplayAbility : public UGameplayAbility
{
GENERATED_BODY()
public:
// 시작 어빌리티 일 경우 부여할 때 한 번만 확인하기
UPROPERTY(EditDefaultsOnly, Category="Input")
FGameplayTag StartupInputTag;
// 커브 테이블
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, category="Damage")
FScalableFloat Damage;
};
(2) 게임플레이 어빌리티에 데미지 설정
이제 위의 클래스를 부모로 상속받은 게임플레이 어빌리티의 블루프린트에서 데미지를 지정할 수 있다.
데미지 커브 테이블을 생성해 커브의 이름을 FireBolt로 하고 값을 정한다.
해당 커브 테이블을 찾아 넣어준다.
(3) 게임플레이 어빌리티에 커브 테이블 값 사용하기 - AuraProjectileSpell
// 데미지 Set by Caller, 싱글톤, 태그-데미지 쌍
FAuraGameplayTags GameplayTags = FAuraGameplayTags::Get();
const float ScaledDamage = Damage.GetValueAtLevel(GetAbilityLevel());
UAbilitySystemBlueprintLibrary::AssignTagSetByCallerMagnitude(SpecHandle, GameplayTags.Damage, ScaledDamage);
Projectile->DamageEffectSpecHandle = SpecHandle;
Projectile->FinishSpawning(SpawnTransform);
}
}
이전에 AssignTagSetByCallerMagnitude 함수로 50의 고정 값을 넘겨줬던 것을 대체한다.
ScaledDamage를 통해 Damage 태그의 레벨에 위치한 값을 가져올 수 있게 해준다.
이제 어빌리티의 레벨과 커브 테이블에 따라 다른 데미지를 줄 수 있게 되었다.
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
11-5. 몬스터 - (2) 피격 반응 게임플레이 어빌리티 부여 및 활성화 (0) | 2024.12.18 |
---|---|
11-4. 몬스터 - (1) 피격에 대한 반응 - 게임플레이 어빌리티 생성 (0) | 2024.12.18 |
11-2. 게임플레이 이펙트 - (7) 호출자에 의한 크기 계산(Set By Caller Magnitude) - 데미지 계산 (1) | 2024.12.18 |
11-1. 메타 속성(Meta Attributes) - 데미지 계산 (0) | 2024.12.18 |
10-4. 기본 속성 값 적용하기 (0) | 2024.12.17 |