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 어빌리티는 파이어볼이 되돌아온 후에 저절로 파괴되도록 설정되어 있으며, 관통하기 때문에 적과 닿으면 폭발할 필요도 없다.

부모의 함수에서 일부분을 제거하고 그대로 사용한다.