How event BeginPlay work?

The BeginPlay is called whenever an actor is spawned. So for example, if you create a Pawn only once at the start of the game, the Pawn’s BeginPlay() is only called once.

Creating a GameInstance and using the Init will definately only be called once per-run through of the game if you are looking for somewhere to do things only once.

You might want to look at the ‘UGameplayStatics::LoadGameFromSlot’ and ‘UGameplayStatics::SaveGameToSlot’ functions for loading and saving to a file.