Ways to generate OnOverlap in an Actor class?

Hi!

I read different question and answers related why Components OverlapsEvent not generated, but no one solved my problem.

In C++ I try to register a delegate function to my StaticMeshComponent of my actor. On first look it compiles but OnOverlaps events are never generated if the ball and the paddle overlaps.

Header file:

#pragma once

#include "GameFramework/Actor.h"
#include "BallActor.generated.h"

/**
 * 
 */
UCLASS()
class VOID_API ABallActor : public AActor
{
	GENERATED_UCLASS_BODY()

	UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = Ball)
	TSubobjectPtr<UStaticMeshComponent> BallStaticMesh;

	void OnConstruction(const FTransform &Transform) override;
	void Tick(float DeltaSeconds) override;

	void OnBeginOverlap(AActor *OtherActor, UPrimitiveComponent *OtherComponent, int32 OtherBodyIndex, bool bFromSweep, const FHitResult &SweepResult);
};

Source file:

#include "Void.h"
#include "BallActor.h"


ABallActor::ABallActor(const class FPostConstructInitializeProperties& PCIP)
	: Super(PCIP)
{
	BallStaticMesh = PCIP.CreateDefaultSubobject<UStaticMeshComponent>(this, TEXT("BallStaticMesh"));
	RootComponent = BallStaticMesh;

	static ConstructorHelpers::FObjectFinder<UStaticMesh> StaticMeshObj(TEXT("StaticMesh'/Game/Meshes/Ball/Ball.Ball'"));
	BallStaticMesh->StaticMesh = StaticMeshObj.Object;

	// register OverlapEvents
	BallStaticMesh->bGenerateOverlapEvents = true;
	TScriptDelegate<FWeakObjectPtr> delegateFunction;
	delegateFunction.BindUFunction(this, "OnBeginOverlap");
	BallStaticMesh->OnComponentBeginOverlap.Add(delegateFunction);

	// activate tick
	PrimaryActorTick.bCanEverTick = true;
	PrimaryActorTick.bStartWithTickEnabled = true;
	PrimaryActorTick.bAllowTickOnDedicatedServer = true;
}

void ABallActor::OnConstruction(const FTransform &Transform)
{
	Super::OnConstruction(Transform);

	BallStaticMesh->SetMobility(EComponentMobility::Movable);
}

void ABallActor::Tick(float DeltaSeconds)
{
	Super::Tick(DeltaSeconds);
}

void ABallActor::OnBeginOverlap(AActor *OtherActor, UPrimitiveComponent *OtherComponent, int32 OtherBodyIndex, bool bFromSweep, const FHitResult &SweepResult)
{
	if (GEngine)
	{
		GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, TEXT("In OnOverlap!"));
	}
}

The UStaticMesh which is attached to the UStaticMeshComponent has sphere collision generated in the editor:

14857-ballcollision.png

The paddle obj has a box collsion generated in the editor too. In the blueprints of the paddle and ball is “Generate Overlap Events” set to true.

Okay, I solved my error. facepalm

Forgot the UFUNCTION() before OnBeginOverlap

UFUNCTION()
	void OnBeginOverlap(AActor *OtherActor, UPrimitiveComponent *OtherComponent, int32 OtherBodyIndex, bool bFromSweep, const FHitResult &SweepResult);