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:
- A USceneComponent called Rig that serves as the root of the component hierarchy.
- Another USceneComponent called Pivot that is supposed to be a child of the Rig.
- A USpringArmComponent SpringArm, it’s the child of the Pivot.
- 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?