Bind To Classes OnComponentHit event

Hi,

I’m trying to implement a system that can detect hits on certain parts of a mesh and apply different damage.

I have created a USceneComponent that is derived from UCapsuleComponent and am trying to bind the OnComponentHit from the parent so I can fire off my own event after some damage processing.

It seems that I’m not getting the OnComponentHit event to trigger in my Damage Modifier class. Any thoughts as to why? Or if there’s a better approach I’m all ears :slight_smile:

DamageModifierComponent.h
`
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include “CoreMinimal.h”
#include “Components/CapsuleComponent.h”
#include “DamageModifierComponent.generated.h”

class UDamageModifierComponent;

DECLARE_DYNAMIC_MULTICAST_SPARSE_DELEGATE_TwoParams(FDamageModifierHitSignature, UDamageModifierComponent, OnDamageModifierHit, float, damage, FHitResult, hit);

/**
*/
UCLASS(ClassGroup=(Modifiers), meta=(BlueprintSpawnableComponent))
class SURVIVAL_API UDamageModifierComponent : public UCapsuleComponent
{
GENERATED_BODY()

public:
UDamageModifierComponent();

UPROPERTY(BlueprintAssignable, Category = "Modifier Events")
FDamageModifierHitSignature OnDamageModifierHit;

float GetDamageModifier() {return _damageModifier;}

protected:
virtual void BeginPlay() override;

void HandleComponentHit(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComponent,
                        FVector HitImpulse, const FHitResult& HitResult);

UPROPERTY(EditAnywhere, Category="Combat")
float _damageModifier;

};
`

DamageModifierComponent.cpp
`
#include “DamageModifierComponent.h”
#include “SurvivalProjectile.h”

UDamageModifierComponent::UDamageModifierComponent()
{
}

void UDamageModifierComponent::BeginPlay()
{
OnComponentHit.AddDynamic(this, &UDamageModifierComponent::HandleComponentHit);
}

void UDamageModifierComponent::HandleComponentHit(UPrimitiveComponent* HitComponent, AActor* OtherActor,
UPrimitiveComponent* OtherComponent, FVector HitImpulse, const FHitResult& HitResult)
{
UE_LOG(LogTemp, Display, TEXT(“%s was hit”), *GetName());

if(!OtherActor)
{
	return;
}

ASurvivalProjectile* projectile = Cast<ASurvivalProjectile>(OtherActor);
if(!projectile)
{
	return;
}

UE_LOG(LogTemp, Display, TEXT("%s was hit by %s"), *GetName(), *projectile->GetName());

OnDamageModifierHit.Broadcast(projectile->GetDamage(), HitResult);

}`

Using the OnHit Event