Code changes break blueprint

Could you change your blueprint-parent constructor to include the FObjectInitializer? Assuming your blueprint derives from ACharacter2D, instead of using a parameterless constructor try:
ACharacter2D(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());

And in your cpp:

ACharacter2D::ACharacter2D(const FObjectInitializer& ObjectInitializer)
	: Super(ObjectInitializer)
{
    // Your normal constructor contents here
}

Since you derive blueprint from Hero2D, you’d need to do both that and ACharacter2D. I’m not sure if it’ll make a difference, but maybe the blueprint relies on some stuff from the FObjectInitializer argument.