How to best write Managing C++ Classes

Hey guys,

I wanted to create a pair of Managing Classes.
For example:
I wrote an InteractionManager which Broadcasts all Input he gets. Mouse Button Left was clicked, Mouse Wheels, Keyboard Letter and so on…
The Manager itself is an Actor which spawn in World. But I find that approach kinda ugly. Is there a better way of which type my Manager should be? At the Moment he looks like this.

InteractionManager.h:

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

#pragma once

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

DECLARE_DYNAMIC_MULTICAST_DELEGATE(FLeftMouseButtonClicked);
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FRightMouseButtonClicked);

UCLASS()
class GIEG_API AInteractionManager : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	AInteractionManager();

	// Called when the game starts or when spawned
	virtual void BeginPlay() override;
	
	// Called every frame
	virtual void Tick( float DeltaSeconds ) override;

	UInputComponent* InputComponent;

	FLeftMouseButtonClicked LeftClick;
	FRightMouseButtonClicked RightClick;

	UFUNCTION()
	void BroadcastLeftClick();

	UFUNCTION()
	void BroadcastRightClick();

	void BindFunction(const FScriptDelegate &Delegate);
	
};

InteractionManager.cpp

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

#include "GIEG.h"
#include "InteractionManager.h"


// Sets default values
AInteractionManager::AInteractionManager()
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = false;

	AutoReceiveInput = EAutoReceiveInput::Player0;
}

// Called when the game starts or when spawned
void AInteractionManager::BeginPlay()
{
	Super::BeginPlay();

	auto PC = GWorld->GetFirstPlayerController();

	if (PC)
	{
		//I don't know if this is valid.... But it works :D. For first trials this should be ok. But later InteractionManager has to have his own Input Component
		InputComponent = PC->InputComponent;

		if (InputComponent)
		{
			InputComponent->bBlockInput = bBlockInput;
			InputComponent->BindAction(TEXT("LeftClick") , EInputEvent::IE_Pressed, this, &AInteractionManager::BroadcastLeftClick);
			InputComponent->BindAction(TEXT("RightClick"), EInputEvent::IE_Pressed, this, &AInteractionManager::BroadcastRightClick);
			EnableInput(PC);
		}
	}
}

// Called every frame
void AInteractionManager::Tick( float DeltaTime )
{
	Super::Tick( DeltaTime );
}

void AInteractionManager::BindFunction(const FScriptDelegate &Delegate)
{
	LeftClick.Add(Delegate);
}

void AInteractionManager::BroadcastLeftClick()
{
	GEngine->AddOnScreenDebugMessage(-1, 1.0f, FColor::Blue, "Left CLick");
	LeftClick.Broadcast();
}

void AInteractionManager::BroadcastRightClick()
{
	GEngine->AddOnScreenDebugMessage(-1, 1.0f, FColor::Blue, "Right CLick");
	RightClick.Broadcast();
}

The code itself works finde. I have an Instance of this Manager in my GameMode. There I call SpawnActor<>.
I hope you guys can give me some tips and tricks :wink:

Thanks in advance
Greetings