Quick answer: Assets store the old /Script/Module.ClassName path, so after a rename they cannot find the class or property. Add [CoreRedirects] entries to DefaultEngine.ini mapping old names to new (ClassRedirects, PropertyRedirects, StructRedirects, EnumRedirects, FunctionRedirects), restart the editor, then re-save the affected assets.

Renaming C++ types in Unreal is not like renaming in a normal codebase. Blueprints, levels and data assets refer to your classes and properties by name, so a rename that compiles cleanly can leave Blueprints parentless, levels missing actors and property values silently reset to defaults. Core Redirects tell the engine what the old names mean now.

The symptoms

The fix: add Core Redirects

Add a [CoreRedirects] section to Config/DefaultEngine.ini. Names use the reflected name without the A/U/F prefix, inside the module's script package:

[CoreRedirects]
; class AMyOldEnemy renamed to AEnemyCharacter
+ClassRedirects=(OldName="/Script/MyGame.MyOldEnemy",NewName="/Script/MyGame.EnemyCharacter")

; property Health renamed to MaxHealth on AEnemyCharacter
+PropertyRedirects=(OldName="/Script/MyGame.EnemyCharacter.Health",NewName="/Script/MyGame.EnemyCharacter.MaxHealth")

; UFUNCTION renamed
+FunctionRedirects=(OldName="/Script/MyGame.EnemyCharacter.DoAttack",NewName="/Script/MyGame.EnemyCharacter.PerformAttack")

; struct FOldLoot renamed to FLootEntry
+StructRedirects=(OldName="/Script/MyGame.OldLoot",NewName="/Script/MyGame.LootEntry")

; enum renamed, and one value renamed
+EnumRedirects=(OldName="/Script/MyGame.EOldState",NewName="/Script/MyGame.EAIState",ValueChanges=(("EOldState::Idle","EAIState::Idle")))

Restart the editor after editing the file. Redirects are read at startup.

Note that the property redirect uses the new class name in both paths when the class was renamed too, because the class redirect is applied first.

Renaming or moving a module

If you moved classes to a different module, or renamed the module, redirect the whole script package as well as the individual classes:

+PackageRedirects=(OldName="/Script/OldModule",NewName="/Script/MyGame")

Re-save, then decide whether to keep them

Redirects fix loading, but the assets on disk still contain the old names until they are saved again. Open and save the affected Blueprints and levels, or re-save everything from the command line:

UnrealEditor-Cmd.exe "D:\Projects\MyGame\MyGame.uproject" -run=ResavePackages -projectonly -autocheckout

Once every asset that referenced the old names has been re-saved and committed, the redirects are no longer needed. Many teams keep them anyway because they are cheap, and they protect old branches and DLC built against old names. Remove them only when you are sure nothing references the old names.

If the Blueprint was already saved broken

If someone opened and saved a Blueprint while its parent was missing, it may have been reparented to a fallback class or lost data. Add the redirect, then open the Blueprint and use File > Reparent Blueprint to point it back at the correct class. Recover lost property values from version control by comparing the old asset in an editor with the redirect in place.

Not the same as asset redirectors

Core Redirects are for C++ types and members. Renaming or moving Blueprint assets and other content in the Content Browser creates asset redirectors instead, which you clean up with Fix Up Redirectors. Both can be in play at once after a refactor.

Catching what a refactor broke

A missed redirect does not always fail loudly. A property that silently resets to its default can change gameplay in ways nobody notices until players do. Bugnet's Unreal SDK files ensures and fatal errors with recent log output, so load warnings and asserts from a refactor build surface as grouped issues tied to that build, and players can report the odd behavior from an in-game form with a screenshot.

Frequently asked questions

How do I rename a C++ class without breaking Blueprints in Unreal?

Add a ClassRedirects entry under [CoreRedirects] in DefaultEngine.ini mapping /Script/Module.OldName to /Script/Module.NewName, restart the editor and re-save assets that use it.

Why did my Blueprint property values reset after renaming a UPROPERTY?

Saved assets store values by property name. Without a PropertyRedirects entry, the old value has nowhere to go and the new property gets its default.

Do Core Redirects use the A or U prefix?

No. Use the reflected name without the prefix, such as /Script/MyGame.EnemyCharacter for the class AEnemyCharacter.

Can I remove Core Redirects later?

Yes, once every asset that referenced the old names has been re-saved and committed. Keeping them is harmless and protects older branches.

Rename in C++, add the redirect in the same commit, re-save assets in the next one.