New Save & Load System

The Save & Load System allows you to save and load various elements of your scene, such as position, rotation, items, armor, objects that were destroyed, etc.

In the folder below you will find a demonstration of the save & load system.

Add the components below to save and load the respective data:

Script Name
Description

JUAutoSave

Automatically saves the game state at defined intervals.

JUSaveLoadArmor

Handles saving and loading of character armor data.

JUSaveLoadCharacter

Saves and loads general character properties and stats.

JUSaveLoadComponent

Base class for create scripts with save/load capabilities.

JUSaveLoadDestroyedObject

Tracks and restores destroyed objects in the scene.

JUSaveLoadGeneralItem

Manages saving and loading for generic inventory items.

JUSaveLoadHealth

Handles saving and restoring health values.

JUSaveLoadInventorySlotUI

Saves and restores inventory slot UI state.

JUSaveLoadItem

Base class for saving and loading individual items.

JUSaveLoadMeleeWeapon

Saves and loads data for melee weapons.

JUSaveLoadManager

Central manager that coordinates all save/load processes.

JUSaveLoadModeComponent

Allows different save/load modes (Global, Scene)

JUSaveLoadThrowableItem

Manages saving and loading for throwable inventory items.

JUSaveLoadWeapon

Saves and loads ranged weapon data.

JUSaveLoadWheeledVehicle

Manages saving and loading of wheeled vehicle states.

JUSavePointTrigger

Trigger that initiates a save at specific points.

Custom Save and Load Data

In some situations, you may want to save additional data beyond the default JU TPS data, such as the player's level, custom progress variables, or specific gameplay states. Below is a detailed example showing how to create a custom script to save, load, and delete this type of data using the JU.SaveLoad library.

PlayerCustomSaveExample.cs
using UnityEngine;
using JU.SaveLoad; // Use JU.SaveLoad library

public class PlayerCustomSaveExample : MonoBehaviour
{
    // Example data to save
    public int playerLevel = 1;
    public float playerHealth = 100f;
    public Vector3 playerPosition;

    private string sceneName => UnityEngine.SceneManagement.SceneManager.GetActiveScene().name;

    // Keys to load and save data
    private const string LevelKey = "playerLevel";
    private const string HealthKey = "playerHealth";
    private const string PositionKey = "playerPosition";

    void Start()
    {
        // Example: Try to load the data when the scene starts
        LoadPlayerData();
    }

    public void SavePlayerData()
    {
        // Save primitive types (int, float, string, bool, etc)
        JUSaveLoad.SetSceneValue(sceneName, LevelKey, playerLevel);
        JUSaveLoad.SetSceneValue(sceneName, HealthKey, playerHealth);

        // Save complex types like Vector3 (because JUSaveLoad has custom JsonConverters for Vector types)
        JUSaveLoad.SetSceneValue(sceneName, PositionKey, playerPosition);

        // Apply the save (don't forget this!)
        JUSaveLoad.Save();

        Debug.Log("Player data saved successfully.");
    }

    public void LoadPlayerData()
    {
        // Load player level (with default value if not found)
        playerLevel = JUSaveLoad.GetSceneValue(sceneName, LevelKey, 1);

        // Load player health
        playerHealth = JUSaveLoad.GetSceneValue(sceneName, HealthKey, 100f);

        // Load player position
        playerPosition = JUSaveLoad.GetSceneValue(sceneName, PositionKey, Vector3.zero);

        // Apply position to player
        transform.position = playerPosition;

        Debug.Log("Player data loaded successfully.");
    }

    public void DeletePlayerData()
    {
        // Optional: Delete specific saved keys
        JUSaveLoad.DeleteSceneValue(sceneName, LevelKey);
        JUSaveLoad.DeleteSceneValue(sceneName, HealthKey);
        JUSaveLoad.DeleteSceneValue(sceneName, PositionKey);

        // Apply the deletion
        JUSaveLoad.Save();

        Debug.Log("Player save data deleted.");
    }
}

Last updated