Game Singleton vs Game Instance vs Level Script Actor

We put all persistent data and persistent services in GameInstance. Easy to use and that’s its purpose.

Which one of the approaches in the title would be the best way to have a persistent actor and data in every level (maybe except menu, but there it can be ignored)? Similar to how UWorld has a UNavigationSystem instance which is then gotten with UNavigationSystem::GetCurrent().

It depends on the type and context of data you’re trying to store. Most things can be covered by UGameInstance and ULocalPlayer. Both classes are persistent between levels until you close the game.