beginner Save & Load

PlayerPrefs Save Helper

Type-safe PlayerPrefs wrapper with support for bool, Vector3, Color, and any serializable object via JSON.

Unity 2022.3+ · 1.6 KB · SaveHelper.cs

How to Use

1

No setup required — SaveHelper is a static utility class

2

Save bool: SaveHelper.SetBool("muted", true)

3

Save Vector3: SaveHelper.SetVector3("checkpoint", transform.position)

4

Save object: SaveHelper.SetObject("settings", mySettings)

5

Load: var pos = SaveHelper.GetVector3("checkpoint")

6

Check: SaveHelper.HasKey("checkpoint")

7

For file-based saves with multiple slots, use JSON Save Utility instead

Source Code

SaveHelper.cs
C#
using UnityEngine;

/// <summary>
/// Type-safe PlayerPrefs wrapper. Supports bool, Vector3, Color,
/// and any serializable type via JSON.
/// </summary>
public static class SaveHelper
{
    // ---- Bool ----
    public static void SetBool(string key, bool value)
    {
        PlayerPrefs.SetInt(key, value ? 1 : 0);
    }

    public static bool GetBool(string key, bool defaultValue = false)
    {
        return PlayerPrefs.GetInt(key, defaultValue ? 1 : 0) == 1;
    }

    // ---- Vector3 ----
    public static void SetVector3(string key, Vector3 value)
    {
        PlayerPrefs.SetFloat(key + "_x", value.x);
        PlayerPrefs.SetFloat(key + "_y", value.y);
        PlayerPrefs.SetFloat(key + "_z", value.z);
    }

    public static Vector3 GetVector3(string key, Vector3 defaultValue = default)
    {
        return new Vector3(
            PlayerPrefs.GetFloat(key + "_x", defaultValue.x),
            PlayerPrefs.GetFloat(key + "_y", defaultValue.y),
            PlayerPrefs.GetFloat(key + "_z", defaultValue.z)
        );
    }

    // ---- Color ----
    public static void SetColor(string key, Color value)
    {
        PlayerPrefs.SetFloat(key + "_r", value.r);
        PlayerPrefs.SetFloat(key + "_g", value.g);
        PlayerPrefs.SetFloat(key + "_b", value.b);
        PlayerPrefs.SetFloat(key + "_a", value.a);
    }

    public static Color GetColor(string key, Color defaultValue = default)
    {
        return new Color(
            PlayerPrefs.GetFloat(key + "_r", defaultValue.r),
            PlayerPrefs.GetFloat(key + "_g", defaultValue.g),
            PlayerPrefs.GetFloat(key + "_b", defaultValue.b),
            PlayerPrefs.GetFloat(key + "_a", defaultValue.a)
        );
    }

    // ---- Generic JSON ----

    /// <summary>
    /// Save any serializable object as JSON to PlayerPrefs.
    /// </summary>
    public static void SetObject<T>(string key, T obj)
    {
        string json = JsonUtility.ToJson(obj);
        PlayerPrefs.SetString(key, json);
    }

    /// <summary>
    /// Load a serializable object from PlayerPrefs JSON.
    /// </summary>
    public static T GetObject<T>(string key, T defaultValue = default)
    {
        string json = PlayerPrefs.GetString(key, "");
        if (string.IsNullOrEmpty(json))
            return defaultValue;

        return JsonUtility.FromJson<T>(json);
    }

    // ---- Utility ----

    /// <summary>Check if a key exists.</summary>
    public static bool HasKey(string key) => PlayerPrefs.HasKey(key);

    /// <summary>Delete a specific key.</summary>
    public static void Delete(string key) => PlayerPrefs.DeleteKey(key);

    /// <summary>Delete all saved data.</summary>
    public static void DeleteAll() => PlayerPrefs.DeleteAll();

    /// <summary>Save changes to disk immediately.</summary>
    public static void Save() => PlayerPrefs.Save();
}
Ready for more? JSON Save Utility File-based JSON save/load utility.