Loading from slot doesn't seem to work if I call open level from GameplayStatics

I’m trying to implement a feature in my save mechanic where the player can open a loading menu from any level in my game and load their last save file. The problem I seem to be having though is that when I call UGameplayStatics::OpenLevel(GetWorld(), LoadGame->LevelName), opening the level will destroy my character class when I leave the current level and then construct it when I enter the new level. This in turn is resetting all my character values to their defaults or whatever the editor defaults are. Does anyone have any advise as to how I can maintain my loaded slot data between levels?
Here is my saving and loading functions. The properties in my MeatSaveGame class all have the UPROPERTY(VisibleAnywhere, Category = Basic)


void AMeatCharacter::SaveGame()
{
    UMeatSaveGame* SaveGame = Cast<UMeatSaveGame>(UGameplayStatics::CreateSaveGameObject(UMeatSaveGame::StaticClass()));
    if(SaveGame)
    {
        SaveGame->PlayerStats.MaxHealth = PlayerStats.MaxHealth;
        SaveGame->PlayerStats.Health = PlayerStats.Health;
        SaveGame->PlayerStats.MaxStamina = PlayerStats.MaxStamina;
        SaveGame->PlayerStats.Stamina = PlayerStats.Stamina;

        SaveGame->Rotation = GetActorRotation();
        SaveGame->Location = GetActorLocation();

        FString LevelName = GetWorld()->GetMapName();
        LevelName.RemoveFromStart(GetWorld()->StreamingLevelsPrefix);
        SaveGame->LevelName = LevelName;
        UGameplayStatics::SaveGameToSlot(SaveGame, SaveGame->SlotName, 0);
    }
}

void AMeatCharacter::LoadGame()
{
    // This is fine for now however, this is going to be problematic when the need for saving levels will be necessary
    UMeatSaveGame* LoadGame = Cast<UMeatSaveGame>(UGameplayStatics::CreateSaveGameObject(UMeatSaveGame::StaticClass()));
    LoadGame = Cast<UMeatSaveGame>(UGameplayStatics::LoadGameFromSlot(LoadGame->SlotName, LoadGame->SlotIndex));

    if (LoadGame)
    {
        UGameplayStatics::OpenLevel(GetWorld(), *LoadGame->LevelName);
        if(PlayerController)
        {
            FInputModeGameOnly Input;
            PlayerController->SetInputMode(Input);
        }
        PlayerStats = LoadGame->PlayerStats;
        // If I debug from here I can see that LoadGame does get the rotation from the save game fucntion
        SetActorRotation(LoadGame->Rotation);
        SetActorLocation(LoadGame->Location);
    }
}

I posted a similar question in the answer hub as well.

I tried using a game instance but I’m having the same problem where after I call open level anything set in my load game function is destroyed as open level reconstructs my character and deletes the data.
Surely someone knows. Thanks for any help

It’s working as it should.
You have to execute load game after the level is loaded, not before.

Yeah, sorry, that’s what I’m trying to ask. I want to be able to do it from a pause menu, where the character could be in any level. Or, be able to do it from the game start menu, which is it’s own level as well.

Okay so I did some blue print scripting with game instance, game save, and level blueprint classes. At the very basic level I set a Boolean variable when I “load” a game. After loading the level I check the game instance to see if that value is true. If so, that means it begin play was triggered by my load event. Then, I call a different load function from my character controller that loads the slot again. This time, getting the save location and rotation. And finally, I get the player character and set the rotation and location.

Now, this solution means that I am calling LoadFromSlot twice in order to load the game. Does anyone know if there is a more elegant and or optimal way to do this. I can provide any pictures if clarification is needed.

You can create a tiny “meta” slot file that contains only the name of level saved then load that and call OpenLevel function.

Engine have a C++ event that executes every time a level is loaded, you can subscribe to that event to load the actual “fat” slot file once you have opened target level from first meta slot.

That would mean creating two save game objects when i save and saving them both to the slot, I assume. I’ll give it a shot. I also came across Rama’s tutorial about ALevelScriptActor. I may try and use that class to create a function for all of my levels to check the game instance for bool I described in my last post.
Thanks for the help.