Un archivo puede faltar, estar vacío o contener datos inválidos.

Comprobar existencia

if (!File.Exists(ruta))
{
    return CrearDatosIniciales();
}

Try-catch

try
{
    string json =
        File.ReadAllText(ruta);

    SaveData datos =
        JsonUtility.FromJson<SaveData>(
            json
        );
}
catch (System.Exception error)
{
    Debug.LogError(
        "Error cargando save: " +
        error.Message
    );
}

Validar datos

Aunque el JSON cargue, revisá valores críticos.

if (datos.monedas < 0)
{
    datos.monedas = 0;
}

Backup

Una estrategia más robusta:

save.json
save_backup.json

Antes de reemplazar el save principal, podés conservar una copia anterior.

Resumen rápido

Revisar:

existe archivo
JSON válido
versión
rangos válidos
backup