Well, this was a pain in the *** to debug.
Steps:
1: Setup up a UMG widget blueprint similar to (note the variable and function of the same type with the same name):
2: Call the function from BeginPlay on the level blueprint.
3: Reload the level (load the same level while it is playing).
4: Crash with cryptic error messages like:
One or more of the steps may be redundant, they’re just what caused it in my case. Renaming the function to something else (in this case NewMission) fixed the crash. This kind of name conflict is caught in C++, but I overlooked it here and no warning was provided. The error message was also quite useless. It’s quite obvious there is a name conflict once you know it’s there, as finding references to the variable also finds references to the usages in-function.