Any reason for a difference in execution order for Begin Play calls?

Thanks for that link it explained a little bit, like why Actors in the Level are first in Editor and last in a Build / Standalone. There are a bunch of other unexpected orders too.

Pawn swaps between being “least important” to “most important” (opposite the Actors) which re-organizes Pawn → Player Controller. Player State and Player Controller flip so you can’t rely on Begin Play interactions between those. Level moves from 3rd to nearly last, and nothing can really access the level but can cause broken interactions with the level if it’s assigning events to delegates.

I know you said you can’t answer the why. I’m elaborating in-case someone comes by who could.


Also, for anyone who comes by seeking a solution to this (wanting to remove errors and not break things) my (feels kinda hacky) solution:

Explanation: I added a boolean value so I could test whether or not Begin Play had already completed. If it is true, the level can call the function/event whenever it wants because the Controller should be ready to go. If it is false, the level binds that function/event to a Delegate on the Controller so the controller can tell the Level when it’s done.