Problems with custom Scene Component

Hello guys,

I want to create a custom (Scene Component) Camera Rig Component. I want it as a component because I don’t want to have Camera Logic inside my ACharacter class. So I created UCameraRigComponent class that looks like this:

UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class THIRDPERSON_API UCameraRigComponent : public USceneComponent
{
	GENERATED_BODY()

public:	

	UCameraRigComponent();

	virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;

protected:

	virtual void BeginPlay() override;

private:

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
	class USceneComponent* Rig;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
	class USceneComponent* Pivot;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
	class USpringArmComponent* SpringArm;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
	class UCameraComponent* Camera;
};

As you can see this CameraRig has 4 parts:

  1. A USceneComponent called Rig that serves as the root of the component hierarchy.
  2. Another USceneComponent called Pivot that is supposed to be a child of the Rig.
  3. A USpringArmComponent SpringArm, it’s the child of the Pivot.
  4. And lastly a UCameraComponent Camera attached to the spring arm.

So when I add this component to an actor I want it to receive this hierarchy of components:

Rig (Root)
→ Pivot (Child of Rig)
->SpringArm (Child of Pivot)
->Camera (Child of SpringArm)

Here is the constructor:

UCameraRigComponent::UCameraRigComponent()
{
	PrimaryComponentTick.bCanEverTick = true;

	this->Rig = CreateDefaultSubobject<USceneComponent>(TEXT("Rig"));
	this->Rig->SetupAttachment(this->GetOwner()->GetRootComponent());

	this->Pivot = CreateDefaultSubobject<USceneComponent>(TEXT("Pivot"));
	this->Pivot->SetupAttachment(this->Rig);

	this->SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
	this->SpringArm->SetupAttachment(this->Pivot);

	this->Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
	this->Camera->SetupAttachment(this->SpringArm, USpringArmComponent::SocketName);
}

It doesn’t achieve the needed result. When I add my custom CameraRig component to an actor it doesn’t receive the mentioned hierarchy of components. How can I achieve such a result?