Live

Unity Utility

Save System, by DTWorldz

A focused Unity 6 persistence utility for capturing component state, matching it through stable IDs, and restoring scene or runtime-spawned objects from JSON save slots.

Product facts verified

Save System, by DTWorldz hero artwork.
Save System, by DTWorldz workflow preview.

Workflow / 01—03

From a gameplay component to a restorable save slot

The system keeps persistence opt-in: configure storage once, then make each gameplay component responsible for its own compact state.

Easy, Customizable, Component Driven workflow screenshot for Save System, by DTWorldz.

01 / Easy, Customizable, Component Driven

The Save System identity: a focused persistence tool built around ease of use, customization and component-driven Unity workflows.

World Data in Motion workflow screenshot for Save System, by DTWorldz.

02 / World Data in Motion

A DTWorldz visual for the feeling of saved worlds, player progress and project data moving safely through the system.

Product media

The workflow in motion

Original product videos and screenshots, kept in the same gallery flow as the current asset record.

The Save System identity: a focused persistence tool built around ease of use, customization and component-driven Unity workflows.

Image 1 / 2

Easy, Customizable, Component Driven

The Save System identity: a focused persistence tool built around ease of use, customization and component-driven Unity workflows.

Production brief

Explicit state ownership instead of opaque automatic serialization

Save System, by DTWorldz uses a component-driven contract: every participating ISaveable exposes a stable SaveId, captures a JsonUtility-compatible snapshot, and restores that snapshot when the matching record is loaded. This keeps the shape and lifecycle of persistent data in the gameplay code that owns it.

SaveManager coordinates the scene-wide operation, writes named slots below Application.persistentDataPath, and restores runtime-spawned objects before applying their state when an optional PrefabCatalog recipe is present. Included examples show Animator, Rigidbody2D, character-stat, inventory, transform, and spawning adapters without making those game-specific implementations part of the core contract.

  • ISaveable contract with CaptureState and RestoreState ownership.
  • SaveGuid identity for scene objects and runtime-spawned instances.
  • JsonUtility-compatible per-participant payloads in a versioned save file.
  • Asynchronous named-slot read and write helpers under Application.persistentDataPath.
  • Atomic temp-file-to-final-file writes to reduce partial-save risk.
  • Optional GZip compression and lightweight XOR obfuscation.
  • Optional PrefabCatalog recipes for restoring missing runtime objects.
  • Optional example adapters for Animator, Rigidbody2D, stats, inventory, transforms, and spawning.

System map

How the package is organized

The major product areas, presented as an editorial map instead of a wall of feature cards.

Persistence

Capture only the state your systems own

Persistence is opt-in and explicit: a participant describes its stable identity and serializable snapshot instead of relying on automatic scene serialization.

  • ISaveable exposes SaveId, CaptureState and RestoreState
  • Each saved entry records identity, concrete payload type and JSON
  • Null snapshots can skip participants with no state to persist
  • Example adapters show component-specific state shapes without hiding the contract

Identity

Match and recreate the right object

Stable IDs separate persistence identity from scene lookup, while optional spawn recipes cover objects that must be recreated during load.

  • SaveGuid stores persistent IDs for scene objects
  • Runtime instances receive IDs that are written into the slot
  • PrefabCatalog maps stable prefab IDs to GameObjects
  • Missing spawnable objects are instantiated before state restore

Storage

Configurable local JSON slots

SaveSettings controls the folder, extension, formatting, and optional processing applied around named local slots.

  • Files live below Application.persistentDataPath
  • Slot names are sanitized before path construction
  • Async UTF-8 reads and atomic temp-to-final writes
  • Optional pretty JSON, GZip compression and lightweight obfuscation

Compatibility

Focused Unity 6 extension asset

The public package is a small, non-rendering persistence utility whose technical fit is defined by its Unity and serialization requirements.

  • Original Unity version 6000.3.0
  • Verified Unity 6000.3.0f1 compatibility
  • Built-in, URP and HDRP listed as compatible
  • Version 1.0.0 released Jan 8, 2026

Related field notes

Practical articles and adjacent DTWorldz tools that add implementation context beyond the product record.

How the save architecture is structured

Read the practical boundaries behind stable IDs, async slot operations, atomic writes and versioned data.

Read more

See persistence in a larger Unity foundation

Compare the standalone utility with the broader systems included in the 2D Top Down RPG Sandbox Project.

Read more

Field notes

Details when you need them

The deeper technical record remains available without crowding the main product story.

Asset Store details
Availability
Asset Store
Price
$9.99 USD
Version
1.0.0
Unity
6000.3.0
Pipeline
Built-in / URP / HDRP
File Size
375.6 KB
Type
Extension Asset
Rating
Not enough ratings
Release
Jan 8, 2026
Current package signals
Save Contract
ISaveable

Each participating component owns its serializable CaptureState and RestoreState implementation.

Stable Identity
SaveGuid

Records are matched to scene objects and recreated runtime instances through persistent IDs.

Slot Storage
Async JSON

Named slots use asynchronous UTF-8 reads and atomic temp-file-to-final-file writes.

Runtime Restore
PrefabCatalog

Optional prefab recipes recreate missing runtime objects before their saved payload is applied.

Full feature coverage

Component-Owned State

ISaveable keeps CaptureState and RestoreState beside the gameplay component that understands the data and its invariants.

Stable SaveGuid Identity

Scene objects retain a stable GUID, while runtime prefab instances can persist and recover the identifier written into their save entry.

JsonUtility-Compatible Files

Versioned save files contain per-object JSON payloads so state stays inspectable and follows Unity's serialization model.

Async Named Save Slots

Named slots are read and written asynchronously beneath Application.persistentDataPath with configurable folders and extensions.

Atomic File Writes

A save is written to a temporary file before being moved to its final path, reducing the chance of leaving a partially written slot.

Runtime Prefab Restoration

Optional spawn recipes and PrefabCatalog mappings recreate missing runtime objects before their saved component state is applied.

Examples and Data Helpers

Optional adapters demonstrate Animator, Rigidbody2D, stats, inventory, transform, and spawning state, while helpers cover dictionaries and polymorphic lists.

Optional Compression and Obfuscation

SaveSettings can enable GZip compression and lightweight XOR obfuscation. Obfuscation deters casual editing but is not encryption.

Complete workflow notes
  1. 01

    Configure SaveSettings and SaveManager

    Create a SaveSettings asset, choose the root folder, file extension, JSON formatting, and optional compression or obfuscation, then assign it to the scene SaveManager.

  2. 02

    Implement the save contract

    Implement ISaveable on each participating component, return a compact serializable payload from CaptureState, and apply that payload in RestoreState.

  3. 03

    Assign stable identity

    Use SaveGuid so a scene object keeps the same identifier across sessions and a runtime-instantiated prefab receives an ID that can be persisted and reassigned during load.

  4. 04

    Register runtime prefab recipes when needed

    For objects that may not exist when a slot is loaded, provide a stable prefab ID and map it through PrefabCatalog so the loader can instantiate the object before state restoration.

  5. 05

    Save or load a named slot

    Call the async SaveManager slot APIs. The manager captures participants, writes JSON through an atomic file operation, and on load recreates missing spawnables before routing each payload back to the matching component.

Compatibility and setup

Unity Version

Version 1.0.0 lists Unity 6000.3.0 as the original version and Unity 6000.3.0f1 as the verified compatibility target.

Serialization Contract

Saved payload types must be compatible with Unity JsonUtility. Use serializable fields, represent dictionaries as lists, and preserve runtime-resolved concrete types in IL2CPP/AOT builds.

Stable Identity

Every repeated scene or runtime entity should use a stable SaveGuid. Type-name fallback is only suitable for a unique singleton and can collide when multiple instances exist.

Runtime Object Restore

Recreating missing runtime objects requires a stable prefab ID and a matching PrefabCatalog entry. Projects using Addressables or another resolver must adapt that lookup path.

Local Storage and Security

Slots are local files under Application.persistentDataPath. Optional compression reduces size; optional XOR obfuscation is not encryption and should not protect sensitive data.

Render Pipeline Fit

Unity Asset Store lists Built-in, URP, and HDRP compatibility for Unity 6000.3.0f1 because the package is a non-rendering persistence extension.

For Unity teams that want explicit control over persistent state

The asset fits projects that prefer a small, adaptable persistence foundation over a game-specific or reflection-heavy all-in-one save solution.

  • Unity 6 projects that need named local save slots.
  • Component-based games where each system owns its state contract.
  • Worlds with scene objects that require stable persistence identity.
  • Games that create objects at runtime and need optional prefab restoration.
  • Teams comfortable defining JsonUtility-compatible data transfer objects.
  • Developers who want inspectable JSON plus optional compression or obfuscation.
Frequently asked questions

What does the save system persist automatically?

Only components that opt into the persistence contract are captured. Implement ISaveable and return a serializable snapshot from CaptureState, then apply that payload in RestoreState. This keeps saved data explicit and prevents unrelated scene state from being serialized accidentally.

How are saved records matched to the correct object?

SaveGuid provides a stable identifier for scene objects. Runtime-created objects receive an ID that is stored in the save entry and reassigned if the object is recreated during load.

Can it restore objects that were spawned at runtime?

Yes, when the object provides a prefab recipe and its stable prefab ID is registered in PrefabCatalog. The loader recreates missing spawnable objects and assigns their saved ID before routing state back to their components.

Where are save slots stored?

Named slots are stored under Application.persistentDataPath using the root folder and file extension configured in SaveSettings. Writes use a temporary file followed by a move to the final path.

What JSON limitations should I plan for?

Payloads follow Unity JsonUtility rules: use serializable classes or structs with fields, convert dictionaries to serializable key/value lists, and explicitly preserve concrete polymorphic types for IL2CPP/AOT builds. The package includes helpers for serializable collections and tagged polymorphic payloads.

Is the optional obfuscation secure encryption?

No. The XOR-based option is lightweight obfuscation intended to deter casual text editing. It is not cryptographic protection and should not be presented as encryption for sensitive or hostile data.

Use cases and capabilities
  • Unity 6
  • Unity 6 Save System
  • Unity JSON Save Load
  • Component-Driven Persistence
  • Stable Object IDs
  • Runtime Prefab Restore
  • Async Save Slots
  • JsonUtility
  • Atomic File Write
  • IL2CPP-Aware Data