Ah thanks, I did see the C++ section in the docs but from what I gathered it looked like it was for runtime use since it didn’t create a default subobject in the constructor. I didn’t want to go down that route because if you do this on BeginPlay or PostInitializeComponents then it won’t show up when you change instance in the editor.
As I was looking into this more I remembered an alternative to UCustomizableSkeletalComponent called UCustomizableObjectInstanceUsage. It serves the same purpose but is just a UObject instead of a component, so it’s a bit cheaper too. I got it working and updating in editor by overriding OnConstruction and creating it there:
void ACustomizableCharacter::OnConstruction(const FTransform& Transform)
{
Super::OnConstruction(Transform);
CustomizableObjectInstanceUsage = NewObject<UCustomizableObjectInstanceUsage>(SkeletalMesh);
CustomizableObjectInstanceUsage->AttachTo(SkeletalMesh);
CustomizableObjectInstanceUsage->SetCustomizableObjectInstance(CustomizableObjectInstance);
CustomizableObjectInstanceUsage->SetComponentName("Body");
}
Not sure why they don’t mention this approach in the C++ section because UCustomizableObjectInstanceUsage has a nice description in the code, to me it is the cleanest way to do it as you avoid having another component clutter the list and also save a bit of performance.