Course contentsShow
← Unity Game Development
Lesson 765 of 82811. Performance and Data PersistenceFree lesson

Managing Save Slot Metadata and Thumbnails

Develop a system to store and retrieve metadata like timestamps and screenshots to provide users with a visual save management interface.

In this lesson, you will learn how to enrich your save system by pairing raw game data with descriptive metadata and visual thumbnails for a professional user experience.

Decoupling Metadata from Game State

When a player opens a "Load Game" menu, parsing entire save files just to display a timestamp or a level name is a performance disaster. Instead, you should maintain a separate SaveMetadata object or file. This small, lightweight structure contains only the essential information needed for the UI, such as DateTime, PlayTime, LevelName, and a reference to the associated Texture2D.

Capturing the Thumbnail

To create a thumbnail, you can use ScreenCapture.CaptureScreenshotAsTexture() or access the RenderTexture directly after a frame finishes. Since saving a high-resolution screenshot can bloat your disk usage, downscale the texture before encoding it.

public void SaveGameWithThumbnail(int slotIndex, GameData data) {
    // 1. Capture the visual state
    Texture2D thumbnail = ScreenCapture.CaptureScreenshotAsTexture();
    byte[] thumbBytes = thumbnail.EncodeToJPG(50); // High compression
    
    // 2. Create the lightweight metadata container
    SaveMetadata meta = new SaveMetadata {
        timestamp = DateTime.Now.ToString(),
        levelName = SceneManager.GetActiveScene().name,
        thumbnailData = thumbBytes
    };

    // 3. Serialize both separately
    File.WriteAllBytes(GetPath(slotIndex, "meta"), JsonUtility.ToJson(meta));
    File.WriteAllBytes(GetPath(slotIndex, "data"), BinarySerialization.Serialize(data));
}

Optimizing the UI Load

When the "Load Game" screen initializes, your UI manager should only iterate through the directory to read the small meta files. Because these files contain minimal data, they load near-instantaneously, allowing you to populate your scroll view with icons and timestamps without causing a frame stutter. Only when the user selects a specific slot to "Load" do you trigger the heavier task of deserializing the full GameData object. This separation ensures that your UI remains responsive, regardless of how many save slots exist.

Key Takeaway: Separate your metadata from your primary save data so that your UI can display slot information quickly without needing to load or decrypt the full game state.