Hello,
I’m struggling with components, So I’ve created an actor class with differents custom component to group up components. From this class, I’ve created a blueprint on which, I’ve had meshComponents into those custom components. The problem is that when I put my blueprint in a scene, All the components I’ve add on the blueprint, magicaly goes under the actor root component.
Here is my Actor class :
UCLASS()
class AEditorGizmo : public AActor
{
GENERATED_BODY()
public:
AEditorGizmo();
UPROPERTY(EditAnywhere, BlueprintReadWrite)
UEditorGizmoToolComponent* TranslationTool;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
UEditorGizmoToolComponent* RotationTool;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
UEditorGizmoToolComponent* ScaleTool;
}
AEditorGizmo::AEditorGizmo()
{
USceneComponent* root = CreateDefaultSubobject<UMeshComponent>("Root");
RootComponent = root;
TranslationTool = CreateDefaultSubobject<UEditorGizmoToolComponent>("Translation");
TranslationTool->AttachToComponent(RootComponent, FAttachmentTransformRules::KeepRelativeTransform);
RotationTool = CreateDefaultSubobject<UEditorGizmoToolComponent>("Rotation");
RotationTool->AttachToComponent(RootComponent, FAttachmentTransformRules::KeepRelativeTransform);
ScaleTool = CreateDefaultSubobject<UEditorGizmoToolComponent>("Scale");
ScaleTool->AttachToComponent(RootComponent, FAttachmentTransformRules::KeepRelativeTransform);
}
And here is the custom component code
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class UEditorGizmoToolComponent : public USceneComponent
{
GENERATED_BODY()
public:
// Sets default values for this component's properties
UEditorGizmoToolComponent();
UPROPERTY(EditAnywhere, BlueprintReadWrite)
USceneComponent* XAxis;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
USceneComponent* YAxis;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
USceneComponent* ZAxis;
};
UEditorGizmoToolComponent::UEditorGizmoToolComponent()
{
PrimaryComponentTick.bCanEverTick = true;
FName axisName = FName(*("XAxis" + GetName()));
XAxis = CreateDefaultSubobject<USceneComponent>(axisName);
XAxis->AttachToComponent(this, FAttachmentTransformRules::KeepRelativeTransform);
axisName = FName(*("YAxis" + GetName()));
YAxis = CreateDefaultSubobject<USceneComponent>(axisName);
YAxis->AttachToComponent(this, FAttachmentTransformRules::KeepRelativeTransform);
axisName = FName(*("ZAxis" + GetName()));
ZAxis = CreateDefaultSubobject<USceneComponent>(axisName);
ZAxis->AttachToComponent(this, FAttachmentTransformRules::KeepRelativeTransform);
}
In the blueprint editor
In the scene hierarchy