FAQ & Common issues, Dont's

Don'ts

1. Remember Prefabs are placed into Scene in Design Time and not instantiated during Runtime

  • 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

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