Crash when applying damage.

As soon as I apply damage my game crash. Not when the damage interface isn’t implemented.

Interface:
virtual float TakeDamage(float DamageAmount, AController* InstigatedBy, AActor* DamageCauser) = 0;

Error:
UnrealEditor_FirstPersonShooter_0014!AWeaponBase::HandleFire() [D:\Unreal Engine Projects\FirstPersonShooter\Source\FirstPersonShooter\Actor\WeaponBase.cpp:88]
UnrealEditor_FirstPersonShooter_0014!AWeaponBase::StartFire() [D:\Unreal Engine Projects\FirstPersonShooter\Source\FirstPersonShooter\Actor\WeaponBase.cpp:36]

C++
DrawDebugLine(GetWorld(), Start, End, FColor::Red, false, 0.25f, 0, 1.0f);
bool bHit = GetWorld()->LineTraceSingleByChannel(Hit, Start, End, ECC_Pawn, Params);

	if (bHit && HasAuthority())
	{
		AActor* HitActor = Hit.GetActor();
		if (HitActor && HitActor->GetClass()->ImplementsInterface(UDamageable::StaticClass())) // Check for nullptr hit actor
		{
			GEngine->AddOnScreenDebugMessage(-1, 0.1f, FColor::Cyan, "Hit an actor");
			IDamageable* DamageableActor = Cast<IDamageable>(HitActor);
			if (DamageableActor)
			{
				DamageableActor->TakeDamage(WeaponStats.Damage, OwningCharacter->GetController(), this);
			}
		}
	}

Hey there @oxyboxy! I think this error could be it stems from calling a pure interface that’s not implemented completely on whatever your cast is hitting. You may need to override their empty implementation to make it work.

Try this format instead :

if (HitActor && HitActor->Implements<UDamageable>())
{
    GEngine->AddOnScreenDebugMessage(-1, 0.1f, FColor::Cyan, "Hit an actor");

    // Call static Execute_ function with target object as first argument
    IDamageable::Execute_TakeDamage(HitActor, WeaponStats.Damage, OwningCharacter->GetController(), this);
}
1 Like