FAQ & Common issues, Dont's

Don'ts

1. Remember Prefabs are placed into Scene in Design Time and not instantiated during Runtime (Since Version 1.6.22 - Crystal Save has limited support for scene baked prefabs (beta))

  • Don’t place prefabs with the Remember Prefab component in the scene during design time, as this will cause duplicates to appear when loading a saved game. The Remember Prefab component is intended for saving and restoring prefabs that are instantiated at runtime.

    • Solutions

      • Remove the Remember Prefab component and make use of the Remember Component Workflow

      • If you can not avoid it, and you have to drag the prefab into the scene: Uncheck Register With Save System

2. Remember Prefabs in combination with Remember Skinned Mesh Renderer or Remember Mesh Renderer

  • Avoid redundant serialization and data application of the same target through overlapping features when using Remember Prefab (Settings: Track Mesh and Material Swaps) in combination with RememberSkinnedMeshRender or RememberMeshRenderer (Settings Remember Shared Materials or Unique Material Properties)

    • Solution

      • Stick to a Single Source of Truth. I generally prefer to handle serialization of components through Remember xx components.

3. Remember Prefabs in combination with Remember GameObject & Remember Transform

  • Avoid redundant serialization and data application of the same target through overlapping features when using Remember Prefab (Settings: Remember Destroyed, Remember Active, Remember Name, Remember Layer, Remember Tag)

    • in combination with Remember Game Object (Settings: Remember Active, Remember Name, Remember Layer, Remember Tag, Remember Destroyed) and

    • Remember Transform (Settings: Remember Position, Remember Rotation) in the prefab root.

  • While adding a Remember Transform does not cause any problems, especially if you use it only for serializing the scale of the Transform, a Remember GameObject however will show a warning because it can cause serialization problems:

4. Instantiating Prefabs without using the SaveablePrefabFactory

  • While in most cases, using Unity's default instantiation method works in most scenarios, there is an edge case where it fails:

    • Instantiating a disabled Prefab

      • Solutions:

        • Use the SaveablePrefabFactory Instantiation method.

        • Keep using Unity's Instantiation method and workaround the problem:

          • Keep the prefab enabled and disable the children

          • Instantiate an enabled Prefab into a deactivated GameObject

          • Instantiate as enabled Prefab, but immediately deactivate after 1 or 2 frames.

FAQ

Question: I have deleted Game Creator 2 or Asset XYZ. I see now compiler errors that symbol xyz does not exist. What is the problem?

  • Answer: Click on Reset Scripting Define Symbols in the menu Tools/Crystal Save/Project or manually remove the Symbol in case of Game Creator 2: REMEMBERME_GC2MODULE_PRESENT in the Player Settings.

List of all Scripting Define Symbols (version 1.6.x):

        // ───────────────────────────────────────────────────────────────
        //  CONSTANTS
        // ───────────────────────────────────────────────────────────────
        private const string STANDARD_SYMBOL             = "REMEMBERME_STANDARD_PRESENT";
        private const string URP_SYMBOL                  = "REMEMBERME_URP_PRESENT";
        private const string HDRP_SYMBOL                 = "REMEMBERME_HDRP_PRESENT";
        private const string MEMORYPACK_SYMBOL           = "MEMORYPACK";
        private const string BOUNCYCASTLE_SYMBOL         = "BOUNCYCASTLE";
        private const string CUSTOM_SYMBOL               = "ARAWN_REMEMBERME";
        private const string GC2CORE_SYMBOL              = "REMEMBERME_GC2CORE_PRESENT";
        private const string GC2DIALOGUE_SYMBOL          = "REMEMBERME_GC2DIALOGUE_PRESENT";
        private const string GC2INVENTORY_SYMBOL         = "REMEMBERME_GC2INVENTORY_PRESENT";
        private const string GC2QUESTS_SYMBOL            = "REMEMBERME_GC2QUESTS_PRESENT";
        private const string GC2STATS_SYMBOL             = "REMEMBERME_GC2STATS_PRESENT";
        private const string GC2MELEE_SYMBOL             = "REMEMBERME_GC2MELEE_PRESENT";
        private const string GC2SHOOTER_SYMBOL           = "REMEMBERME_GC2SHOOTER_PRESENT";
        private const string GC2MAILBOX_SYMBOL           = "REMEMBERME_GC2MAILBOX_PRESENT";
        private const string GC2MODULE_SYMBOL            = "REMEMBERME_GC2MODULE_PRESENT";
        private const string CLOUD_SAVE_SYMBOL           = "REMEMBERME_CLOUDSAVE_PRESENT";
        private const string AUTHENTICATION_SYMBOL       = "REMEMBERME_AUTHENTICATION_PRESENT";
        private const string CORE_SERVICES_SYMBOL        = "REMEMBERME_CORESERVICES_PRESENT";
        private const string LOCALIZATION_SYMBOL         = "REMEMBERME_LOCALIZATION_PRESENT";
        private const string NVIDIA_DLSS_SYMBOL          = "REMEMBERME_NVIDIA_DLSS_PRESENT";
        private const string GOOGLE_PLAY_SYMBOL          = "REMEMBERME_GOOGLEPLAY_PRESENT";
        private const string APPLE_SIGNIN_SYMBOL         = "REMEMBERME_APPLE_SIGNIN_PRESENT";
        private const string FACEBOOK_SDK_SYMBOL         = "REMEMBERME_FACEBOOK_SDK_PRESENT";
        private const string STEAMWORKS_SYMBOL           = "REMEMBERME_STEAMWORKS_PRESENT";
        private const string EDITOR_COROUTINES_SYMBOL    = "REMEMBERME_EDITOR_COROUTINES_PRESENT";
        private const string ADDRESSABLES_SYMBOL         = "REMEMBERME_ADDRESSABLES_PRESENT";
        private const string NANINOVEL_SYMBOL            = "NANINOVEL";
        private const string NANINOVEL_MODULE_SYMBOL     = "REMEMBERME_NANINOVEL_PRESENT";

Question: My prefab doesn't get saved and restored

  • Answer: Make sure the prefab is registered in the Prefab Registry. Open the Crystal Save Settings to see the Prefab Registry

Question: After importing Crystal Save I can't find any Crystal Save related Menu Entry under Tools or it is incomplete. What is the problem?

  • Answer: A scripting define symbol is missing in the Player Settings. Check that these Scripting Define Symbols exist:

In case of HDRP you see REMEMBER_HDRP_PRESENT and in case of Built-In RP you see REMEMBER_STANDARD_PRESENT

Question: No matter what I try, it does not save and restore a state. What is the issue?

  • Answer: There were two reported cases that encountered this issue.

    • One user had serialization issues, caused by running an additional third party serializer in the project.

    • The other user encountered a Unity meta file issue likely created by a computer crash, third party asset, Unity bug etc.

    The only solution for these cases is to start a new project and move over all assets to the new project, and to install Crystal Save before all other assets.

Question: Upon entering Playmode I get these errors. What did I miss to setup?

  • Answer: Install either the Default Settings by clicking on Install Default Setting in Tools/Crystal Save/Settings/ or start with blank settings by opening the Crystal Save settings in Tools/Crystal Save/Settings/Crystal Save Setting

Question: Can I upload metadata and screenshots to Unity Cloud Save?

Yes. When the backend is set to UnityCloudSave and cloudSaveScreenshots, Upload Metadata & Upload Screenshots are enabled, the save service attempts to delete and overwrite the previous screenshot via Unity’s Cloud Save API before capturing a new one, but this comes with consequences

Every overwrite triggers a remote delete call. If the server responds slowly, rate‑limits you, or encounters network problems, the coroutine waits up to 10 seconds before timing out, producing warning logs and making the save appear frozen. Frequent saves magnify these stalls.

Question: I want to have metadata and screenshots when using Cloud Save. What’s the safer approach?

Keep Local Mirror enabled, but disable cloud metadata and screenshot uploads. Store only the save file in the cloud. This reduces network chatter, avoids rate limits, and eliminates long waits on screenshot deletions. Uploading only the save file consumes far less cloud storage, reducing monthly usage costs compared to storing large screenshots or extra metadata. Disabling cloud uploads only skips sending screenshots and metadata to the server; local copies remain intact for in‑game browsing and will persist across sessions unless explicitly cleaned up.

Question: When should I consider enabling cloud screenshots/metadata?

Only for infrequent saves where visual history or remote inspection outweighs the potential performance hit and storage costs—such as developer builds, QA sessions, or occasional milestone saves.

Question: I activated Keep Local Mirror in my WebGL project with Unity Cloud Save, but it seems like my local saves are getting lost. What is the problem?

Make sure to set the Save Method to Player Prefs. This is the only working option that ensures local saves persist in the browser storage.

Question: In my WebGL project, my saves are lost when I close the browser. I don't use Cloud Save solutions and I want to save locally. How can I fix this?

  • Set the Save Method to Player Prefs.

  • Also check that your browser or browser extensions are not clearing storage or cache when closing the browser.

  • Test again with another browser, and keep in mind that Chrome-based browsers are generally better supported than Firefox-based browsers.

Question: I tested my WebGL project by creating a build and running it in my browser. However, the saves do not persist and disappear after reload.

Make sure to test your build on a real server, not on localhost. You can use Unity Play, a one-click upload solution. The Publish to Play feature has been available since Unity version 6000.1.

Question: What is Crystal Save designed for?

Crystal Save exists to persist vital game state—player progress, inventory data, level stats—not to act as a catch-all for every scene or prefab. When used judiciously, it speeds up development; when overused, it becomes a bottleneck.

Question: Why shouldn’t I just save every prefab or scene object?

Because each serialized object adds work to both the save and load pipelines. Unity must coordinate scene loading, component initialization, and dependencies. Saving everything means Unity spends more time reconstructing the world than running your game.

Question: Isn’t serialization just re-instantiating objects?

No. Crystal Save’s serializer interacts with Unity’s scene loading. Objects can be instantiated, destroyed, then re-instantiated while Unity fires OnEnable, OnValidate, Awake, and Start events. Each call chain increases load times and can introduce subtle bugs.

Question: What’s the cost of attaching many components to a GameObject?

Every component may run initialization code or spawn more components at runtime. If you slap 15 components onto a prefab and instantiate it 30 times, you’re forcing Unity to process hundreds of component events—slowing scene loading and consuming memory.

Question: Why not use Crystal Save instead of local or global variables?

Variables live in memory and cost almost nothing to access. Serializing every value, on the other hand, means writing to disk, parsing, and rebuilding objects, which is far heavier. Save only data that truly needs to persist between sessions.

Question: How does “saving everything” impact loading times?

More serialized objects → more data to parse → more instantiation and event calls → longer load screens. What feels like a shortcut during development can lead to sluggish gameplay and frustrated players.

Design scenes so only essential data is saved. Use variables, ScriptableObjects, and scene references for transient state. Profile your load times and keep component counts manageable. Save only what’s required—no more, no less.

Question: Key takeaway?

Crystal Save is a tool, not a crutch. Overusing it to avoid proper architecture leads to bloated save files, longer load times, and unnecessary complexity. Plan your systems, store transient data in code, and serialize only what truly needs persistence.

Common Issues

Editor Performance

  • A few Users reported that the DefineSymbols class tanks Editor Performance. If this is also the case for you, simply deleting this class will solve your issue.

    • On an older system, you might want to delete these Editor classes as well:

      • RememberCompositeHierarchyIcon (Displays a small Icon in the Hierarchy Window)

      • SaveablePrefabHierarchyIcon (Displays a small Icon in the Hierarchy Window)

      • LinkedUniqueIDHierarchyIcon (Displays a small Icon in the Hierarchy Window)

      • SceneObjectIDEditor (Inspector view for SceneObjectID - Class is marked for deletion in a future update)

Deleting these classes won't have any effects on the Save System at runtime or in builds. These classes are just visual helpers and QoL Editor Improvements

Last updated