Blueprint overriding c++ refuses to save because of root component

4.7.6 binary, build 4.7.6-2513093++depot+UE4-Releases+4.7

Of course it’s possible this is not a bug, and if so I’d appreciate any correction. This is similar to the blueprint save bug in [another question][1], but it has nothing to do with /Engine/Transient.

Declaring component to be the root component in a C++ class and then overriding that class with a blueprint leads to the blueprint refusing to save. Beyond that, I cannot declare the root component in the blueprint if any other component has been added in the base class. This makes things challenging, at best.

Steps to reproduce in blank project:

  • Create new project.

  • Create new actor, ActorToOverride.

  • Add the following code to the actor’s constructor:

    USceneComponent* pDummyRootComp = NewNamedObject(this, “Root Component”);
    if(pDummyRootComp) {
    SetRootComponent(pDummyRootComp);
    }

  • Add new blueprint that overrides ActorToOverride.

  • Click save.

This results in the error message:
Can’t save …/…/…/…/…/…/Projects/BugProjects/RootComponentBug/Content/OverridingBlueprint.uasset: Graph is linked to private object(s) in an external package.
External Object(s):
Root Component

Given the error message, it is possible I need to make the component public somehow, or perhaps there is another way to wire up the root component which offends neither the c++ nor the blueprint.

Best,

Joe

Using the answer Can’t save blueprint when component is stored in array, changing NewNamedObject(this, "Root Component") to CreateDefaultSubobject("Root Component") enables the blueprint to save.