Los datos temporales pueden necesitar sobrevivir al cambio de escena.

DontDestroyOnLoad

DontDestroyOnLoad(gameObject);

Un manager puede mantener datos mientras el juego sigue abierto.

Ejemplo

public class GameData : MonoBehaviour
{
    public int monedas;

    void Awake()
    {
        DontDestroyOnLoad(gameObject);
    }
}

Problema de duplicados

Si el manager existe en varias escenas, pueden aparecer copias.

Una solución común:

public static GameData Instance;

void Awake()
{
    if (Instance != null &&
        Instance != this)
    {
        Destroy(gameObject);
        return;
    }

    Instance = this;
    DontDestroyOnLoad(gameObject);
}

Persistencia real

DontDestroyOnLoad no guarda nada en disco.

Si cerrás el juego, esos datos desaparecen.

Para persistencia real necesitás:

archivo
JSON
PlayerPrefs

Resumen rápido

DontDestroyOnLoad
= entre escenas

archivo
= entre sesiones