1. 데미지 입히기
(1) 데미지 커브 생성 후 적용
(2) AuraProjectile 클래스의 OnSphereOverlap 함수의 코드 조각을 리펙토링
bool IsValidOverlap(AActor* OtherActor);
bool AAuraProjectile::IsValidOverlap(AActor* OtherActor)
{
if (DamageEffectParams.SourceAbilitySystemComponent == nullptr)
return false;
AActor* SourceAvatarActor = DamageEffectParams.SourceAbilitySystemComponent->GetAvatarActor();
// 본인과의 충돌 방지
if (SourceAvatarActor == OtherActor)
return false;
// 아군 사격 방지
if (!UAuraAbilitySystemLibrary::IsNotFriend(SourceAvatarActor, OtherActor))
return false;
return true;
}
투사체 겹침 판정 시 유효한 겹침인지 판단하는 부분을 다른 함수로 만들어 관리한다.
void AAuraProjectile::OnSphereOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
if (IsValidOverlap(OtherActor) == false)
return;
void AAuraFireBall::OnSphereOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
// 겹침 검증
if (IsValidOverlap(OtherActor) == false)
return;
파이어볼에서도 해당 함수를 이용하여 조건 미충족 시 얼리 리턴한다.
(3) 데미지 판정
(3-1) AuraProjectile의 bHit 멤버 변수를 Protected 섹션으로 옮기기
이 멤버 변수를 상속받아 사용할 수 있도록 Protected로 옮긴다.
(3-2) AuraProjectile에서 코드 조각 가져오기
void AAuraFireBall::OnSphereOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
// 겹침 검증
if (IsValidOverlap(OtherActor) == false)
return;
if (HasAuthority())
{
// 데미지 판정 - Gameplay Effect Handle
if (auto* TargetASC = UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(OtherActor))
{
// 사망 충격파 벡터 계산
const FVector DeathImpulse = GetActorForwardVector() * DamageEffectParams.DeathImpulseMagnitude;
DamageEffectParams.DeathImpulse = DeathImpulse;
// 투사체의 데미지 이펙트 파라미터에 타겟 ASC를 설정
DamageEffectParams.TargetAbilitySystemComponent = TargetASC;
UAuraAbilitySystemLibrary::ApplyDamageEffect(DamageEffectParams);
}
}
}
FireBlast 어빌리티는 파이어볼이 되돌아온 후에 저절로 파괴되도록 설정되어 있으며, 관통하기 때문에 적과 닿으면 폭발할 필요도 없다.
부모의 함수에서 일부분을 제거하고 그대로 사용한다.
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
27-6. 상위 스펠 - (6) FireBlast - 이펙트로 로컬 게임플레이 큐 활용 (0) | 2025.04.01 |
---|---|
27-5. 상위 스펠 - (5) FireBlast - 폭발 데미지 (0) | 2025.03.31 |
27-3. 상위 스펠 - (3) FireBlast - 파이어볼 소환하기, 움직임 타임라인 (0) | 2025.03.31 |
27-2. 상위 스펠 - (2) 관통 구체 - AuraFireBall 클래스 (0) | 2025.03.31 |
27-1. 상위 스펠 - (1) FireBlast - 화염 폭발 어빌리티, 코스트 & 쿨다운 (0) | 2025.03.31 |