What's the difference between Destroyed and EndPlay?

I’m implementing level streaming, and I was expecting EventDestroyed to fire when a level was unloaded from streaming, indicating that the level and it’s assets had been destroyed and GCed, but debug messages hooked to EventDestroyed never fire. They do fire if I hook them to EndPlay, but what’s the difference? Can I safely assume that if a UObject’s EndPlay fires, it’s being correctly deleted and garbage collected?

Yes, EndPlay is triggered at the first stage of destroying an actor before it is marked as pending kill and before it is removed from the level actor array.

You can read more about Actor life cycle here.

Oh that’s a great chart, thank you! :slight_smile: