Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. We have updated the language to the Editor Terms based on feedback from our employees and community. Learn more.
    Dismiss Notice
  3. Join us on November 16th, 2023, between 1 pm and 9 pm CET for Ask the Experts Online on Discord and on Unity Discussions.
    Dismiss Notice

[RELEASE] allSAVE Pro 1.1.3: Automated serialization - Add saving/loading to your project in seconds

Discussion in 'Assets and Asset Store' started by ProceduralJOYE, Feb 25, 2017.

  1. GregMeach

    GregMeach

    Joined:
    Dec 5, 2012
    Posts:
    249
    Thank you for your reply - I will purchase later today.

    PS You're exactly the kind of developer I like to support on the store - good fortunes
     
    TeagansDad and IngeJones like this.
  2. SirOhlamon

    SirOhlamon

    Joined:
    May 2, 2017
    Posts:
    7
    Hello!

    I need to save and load manually. Plus, I would like to preserve a specific piece of object (for example, the class where the player's statistics are stored). How can i do this?
     
    ProceduralJOYE likes this.
  3. Duffer123

    Duffer123

    Joined:
    May 24, 2015
    Posts:
    1,215
    ProceduralJOYE likes this.
  4. ProceduralJOYE

    ProceduralJOYE

    Joined:
    Dec 13, 2012
    Posts:
    111
    To save and load you need to call Serializer.Save("filepath") and Serializer.Load("filepath"), respectively. You can see examples of this in ConditionalSave.cs, or you can use the existing menu prefabs in the QuickSetup directories. There are instructions for using the menu prefabs in the readme.

    To save a specific class, you only need to make sure that the class type is enabled in the Components or User Types tab in the allSAVE editor window. allSAVE should automatically handle the rest.

    It's going quite well. I have been delayed slightly because I have been working on adding (much-requested) support for TextMesh Pro, but allSAVE 1.1 is looking good. It's much more robust than before, and it should be a lot easier to exercise more control over the saving/loading process using the scripting API.

    As it is, there are probably a couple more weeks of development left before it sees release, but I'm quite happy with the level of improvement. Even managed to sneak a decent optimisation in there to speed up loading by (probably) 20-50%.
     
  5. Duffer123

    Duffer123

    Joined:
    May 24, 2015
    Posts:
    1,215
    Great stuff.
     
  6. PiotrW

    PiotrW

    Joined:
    Nov 2, 2014
    Posts:
    20
    For me this plugin is not working well. As name and description says it is trying to save everything. There is no options to exclude some classes or params or variables. Clicking "Crete registries" newer ends and crashes for me with views/classes generated with marklight for unity.

    I got plenty of attributes in my code. Some set {} and get {} are calculated and reference many object not existing is scene when you press this button in editor. I changed them to fix that issue for this plugin. But it is still trying to access also Marklightforunity.com classes and save object responsible for GUI what is not necessary for me and it is crashing with that plugin and I do not know how to fix it.

    It will be nice to have some classes exclude list or maybe even some PropertyDrawers for objects and variables you would like or not save like

    [Serializable]
    [CanSave]
    public class Z
    {
    [SerializeField]
    [CanSaveParam]
    public int somevalue = 0;
    }

    I like the idea it is trying to be compatible with as many types as possible ... lists .. etc but I really would like to have control what is going to be saved or not.

    Can you try it? I added Marklight for unity(it is for free) and your asset. Opened scene -> GameMenuExample. Added to build.
    And it is impossible to Crete registries to this scene.

    Thanks
    Peter
     
  7. ProceduralJOYE

    ProceduralJOYE

    Joined:
    Dec 13, 2012
    Posts:
    111
    Hi Peter, it sounds like there is some compatibility problem between MarkLight and allSAVE. I wasn't aware of this until now, so thanks for bringing it to my attention. I'll look at that this evening and get back to you as soon as possible with my findings (and a fix).

    allSAVE has options for excluding classes & variables available through the allSAVE window, but they are not shown until after the registries have been generated. If you are unable to generate registries due to this compatibility issue between MarkLight and allSAVE, then you will not be able to see the options.

    Thanks for the steps on how to reproduce the issue. I'll try it this evening.
     
  8. PiotrW

    PiotrW

    Joined:
    Nov 2, 2014
    Posts:
    20
    Thanks for your time and effort. Especially it can be tricky to make it compatible with all asset store plugins ;) with every request :)
     
  9. coverpage

    coverpage

    Joined:
    Mar 3, 2016
    Posts:
    385
    Do you intend to support Mobile platforms? I'm using Fullserializer right now but your serializer looks too amazing. It's crazy how it can serialize everything.
     
    ProceduralJOYE likes this.
  10. ProceduralJOYE

    ProceduralJOYE

    Joined:
    Dec 13, 2012
    Posts:
    111
    HI. Yes, I do intend to support mobile platforms in future, but that would be looking at version 1.5+. After extending the scripting API, adding some feature improvements for PC & PlayMaker support.

    At the moment, we are on version 1.0.1 with 1.1 in the works.
     
    coverpage likes this.
  11. rsklnkv

    rsklnkv

    Joined:
    Sep 8, 2012
    Posts:
    62
    Hi

    I've bought allSave pro and as soon as I import it, Unity crashes
    Now every time when I load my project Unity crashes on start.
    I've tried to delete script cache, allSAVE pro, etc. But as soon as I import it, everything breaks again

    What I'm doing wrong?
     
  12. ProceduralJOYE

    ProceduralJOYE

    Joined:
    Dec 13, 2012
    Posts:
    111
    Hi, I've not seen this error before. I've just sent you a direct message with a few more questions.
    Could you send me your log files? https://docs.unity3d.com/Manual/LogFiles.html
    I'll get this fixed for you as soon as possible.
     
  13. Duffer123

    Duffer123

    Joined:
    May 24, 2015
    Posts:
    1,215
  14. rsklnkv

    rsklnkv

    Joined:
    Sep 8, 2012
    Posts:
    62
    So at the end I've got it to work by removing only one folder:
    "Assets\Autelia\AllSave Pro\Mementos\Builtin\UnityEngine\UI\"

    as soon as I add this folder Unity fails to compile and crashes
     
  15. rsklnkv

    rsklnkv

    Joined:
    Sep 8, 2012
    Posts:
    62
    And now it crashes on "Create Registries" :)

    Here's crash log:
    Code (csharp):
    1.  
    2.  
    3. 0x0000000141404C2F (Unity) RenderBufferHelper_CUSTOM_GetLoadAction
    4. 0x0000000076C2C6B5 (Mono JIT Code) (wrapper managed-to-native) UnityEngine.RenderBufferHelper:GetLoadAction (UnityEngine.RenderBuffer&)
    5. 0x0000000076C2C30E (Mono JIT Code) [C:\buildslave\unity\build\Runtime\Export\Graphics.cs:36] UnityEngine.RenderBuffer:get_loadAction ()
    6. 0x0000000076C2C489 (Mono JIT Code) (wrapper runtime-invoke) <Module>:runtime_invoke_RenderBufferLoadAction_RenderBuffer* (UnityEngine.RenderBuffer*,intptr,intptr,intptr)
    7. 0x00007FF9CD815737 (mono) [c:\buildslave\mono\build\mono\mini\mini.c:4937] mono_jit_runtime_invoke
    8. 0x00007FF9CD768435 (mono) [c:\buildslave\mono\build\mono\metadata\object.c:2623] mono_runtime_invoke
    9. 0x00007FF9CD76E943 (mono) [c:\buildslave\mono\build\mono\metadata\object.c:3838] mono_runtime_invoke_array
    10. 0x00007FF9CD72CE33 (mono) [c:\buildslave\mono\build\mono\metadata\icall.c:2750] ves_icall_InternalInvoke
    11. 0x0000000000880737 (Mono JIT Code) (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (object,object[],System.Exception&)
    12. 0x000000000087E892 (Mono JIT Code) [/Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:222] System.Reflection.MonoMethod:Invoke (object,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo)
    13. 0x0000000014573022 (Mono JIT Code) [/Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoProperty.cs:297] System.Reflection.MonoProperty:GetValue (object,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo)
    14. 0x0000000014572DEF (Mono JIT Code) [/Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoProperty.cs:283] System.Reflection.MonoProperty:GetValue (object,object[])
    15. 0x0000000076B8DBDF (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\Utilities\Reflection\MemberInfoExtensions.cs:85] Autelia.Serialization.MemberInfoExtensions:GetPropertyValue (System.Reflection.PropertyInfo,object)
    16. 0x0000000076B8754A (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\Utilities\Reflection\MemberInfoExtensions.cs:29] Autelia.Serialization.MemberInfoExtensions:GetValue (System.Reflection.MemberInfo,object)
    17. 0x0000000076B81C23 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:454] Autelia.Serialization.Utilities.SceneCrawler:GetReferencedObjectsFromMembers (object,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    18. 0x0000000076B8BCF7 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:523] Autelia.Serialization.Utilities.SceneCrawler:HandleMember (object,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    19. 0x0000000076B91570 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:564] Autelia.Serialization.Utilities.SceneCrawler:AddReferenceCollection (System.Collections.ICollection,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    20. 0x0000000076B8B1DF (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:475] Autelia.Serialization.Utilities.SceneCrawler:HandleMember (object,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    21. 0x0000000076B81C7F (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:455] Autelia.Serialization.Utilities.SceneCrawler:GetReferencedObjectsFromMembers (object,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    22. 0x0000000076B8BCF7 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:523] Autelia.Serialization.Utilities.SceneCrawler:HandleMember (object,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    23. 0x0000000076B91570 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:564] Autelia.Serialization.Utilities.SceneCrawler:AddReferenceCollection (System.Collections.ICollection,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    24. 0x0000000076B8B1DF (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:475] Autelia.Serialization.Utilities.SceneCrawler:HandleMember (object,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    25. 0x0000000076B81C7F (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:455] Autelia.Serialization.Utilities.SceneCrawler:GetReferencedObjectsFromMembers (object,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    26. 0x0000000076B804BA (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:400] Autelia.Serialization.Utilities.SceneCrawler:GetReferencedUnityObjects (UnityEngine.Object,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    27. 0x0000000076B7F8C5 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:377] Autelia.Serialization.Utilities.SceneCrawler:GetReferencedUnityObjectsFromGameObject (UnityEngine.GameObject,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    28. 0x0000000076B7F254 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:353] Autelia.Serialization.Utilities.SceneCrawler:GetLoadedObjects (System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,Autelia.Serialization.Utilities.SceneCrawler/ObjectCategories,System.Collections.Generic.HashSet`1<UnityEngine.Object>&,System.Collections.Generic.HashSet`1<UnityEngine.Object>&,bool)
    29. 0x0000000076B7705D (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:316] Autelia.Serialization.Utilities.SceneCrawler:GetLoadedObjects (UnityEngine.SceneManagement.Scene,Autelia.Serialization.Utilities.SceneCrawler/ObjectCategories,System.Collections.Generic.HashSet`1<UnityEngine.Object>&,System.Collections.Generic.HashSet`1<UnityEngine.Object>&)
    30. 0x0000000076B75210 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Configuration\Registries\PersistentRegistry.cs:942] Autelia.Serialization.PersistentRegistry:TakeSceneCensus (UnityEngine.SceneManagement.Scene,bool)
    31. 0x0000000076B72801 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Configuration\Registries\PersistentRegistry.cs:816] Autelia.Serialization.PersistentRegistry:TakePersistentCensus (System.Collections.Generic.IEnumerable`1<UnityEngine.SceneManagement.Scene>,System.Action,System.Action)
    32. 0x0000000076B70563 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Configuration\Registries\PersistentRegistry.cs:799] Autelia.Serialization.PersistentRegistry:RequestCensus (bool,System.Action`1<int>,System.Action`1<Autelia.Serialization.PersistentRegistry>,System.Action`1<Autelia.Serialization.PersistentRegistry>)
    33. 0x0000000076B636E9 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Configuration\Registries\PersistentRegistry.cs:543] Autelia.Serialization.PersistentRegistry:GetDatabase (System.Action`1<int>)
    34. 0x0000000076B62D28 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Configuration\Registries\PersistentRegistry.cs:724] Autelia.Serialization.PersistentRegistry:Save (System.Action`1<int>)
    35. 0x0000000075ECD411 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\UI\Editor\SerializationWindow.cs:270] Autelia.Serialization.SerializationWindow:OnGuiEditorMode ()
    36. 0x0000000075ECBEA6 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\UI\Editor\SerializationWindow.cs:159] Autelia.Serialization.SerializationWindow:OnGUI ()
    37. 0x00000000008B7122 (Mono JIT Code) (wrapper runtime-invoke) object:runtime_invoke_void__this__ (object,intptr,intptr,intptr)
    38. 0x00007FF9CD815737 (mono) [c:\buildslave\mono\build\mono\mini\mini.c:4937] mono_jit_runtime_invoke
    39. 0x00007FF9CD768435 (mono) [c:\buildslave\mono\build\mono\metadata\object.c:2623] mono_runtime_invoke
    40. 0x00007FF9CD76E943 (mono) [c:\buildslave\mono\build\mono\metadata\object.c:3838] mono_runtime_invoke_array
    41. 0x00007FF9CD72CE33 (mono) [c:\buildslave\mono\build\mono\metadata\icall.c:2750] ves_icall_InternalInvoke
    42. 0x0000000000880737 (Mono JIT Code) (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (object,object[],System.Exception&)
    43. 0x000000000087E892 (Mono JIT Code) [/Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:222] System.Reflection.MonoMethod:Invoke (object,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo)
    44. 0x000000000094069F (Mono JIT Code) [/Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MethodBase.cs:115] System.Reflection.MethodBase:Invoke (object,object[])
    45. 0x000000005AD7C665 (Mono JIT Code) [C:\buildslave\unity\build\Editor\Mono\HostView.cs:262] UnityEditor.HostView:Invoke (string,object)
    46. 0x000000005AD7C507 (Mono JIT Code) [C:\buildslave\unity\build\Editor\Mono\HostView.cs:255] UnityEditor.HostView:Invoke (string)
    47. 0x000000005AE17413 (Mono JIT Code) [C:\buildslave\unity\build\Editor\Mono\HostView.cs:222] UnityEditor.HostView:InvokeOnGUI (UnityEngine.Rect)
    48. 0x000000005AE0B7CD (Mono JIT Code) [C:\buildslave\unity\build\Editor\Mono\GUI\DockArea.cs:346] UnityEditor.DockArea:OnGUI ()
    49. 0x00000000008B7122 (Mono JIT Code) (wrapper runtime-invoke) object:runtime_invoke_void__this__ (object,intptr,intptr,intptr)
    50. 0x00007FF9CD815737 (mono) [c:\buildslave\mono\build\mono\mini\mini.c:4937] mono_jit_runtime_invoke
    51. 0x00007FF9CD768435 (mono) [c:\buildslave\mono\build\mono\metadata\object.c:2623] mono_runtime_invoke
    52. 0x00000001410645B5 (Unity) scripting_method_invoke
    53. 0x0000000141059DF1 (Unity) ScriptingInvocation::Invoke
    54. 0x0000000140D01F9F (Unity) MonoBehaviourDoGUI
    55. 0x0000000140CF4C40 (Unity) IMGUIModule::MonoBehaviourDoGUI
    56. 0x00000001414A0A2D (Unity) MonoBehaviour::DoGUI
    57. 0x00000001417D69E3 (Unity) GUIView::OnInputEvent
    58. 0x000000014008F8B3 (Unity) GUIView::ProcessInputEvent
    59. 0x00000001417D23B3 (Unity) GUIView::ProcessEventMessages
    60. 0x00000001417D8485 (Unity) GUIView::GUIViewWndProc
    61. 0x00007FF9FA1FBC50 (USER32) CallWindowProcW
    62. 0x00007FF9FA1FB5CF (USER32) DispatchMessageW
    63. 0x00000001417F0A59 (Unity) CrashCallback
    64. 0x00000001417F2704 (Unity) WinMain
    65. 0x0000000141AD7444 (Unity) strnlen
    66. 0x00007FF9F88D2774 (KERNEL32) BaseThreadInitThunk
    67. 0x00007FF9FB090D61 (ntdll) RtlUserThreadStart
    68.  
    69.  
     
  16. rsklnkv

    rsklnkv

    Joined:
    Sep 8, 2012
    Posts:
    62
    It works with no scenes in a Build Settings, but as soon as I add our main scene and click to refresh data in allSAVE it crashes

    Code (csharp):
    1.  
    2. ========== OUTPUTING STACK TRACE ==================
    3.  
    4. 0x0000000141404C2F (Unity) RenderBufferHelper_CUSTOM_GetLoadAction
    5. 0x000000004B80E415 (Mono JIT Code) (wrapper managed-to-native) UnityEngine.RenderBufferHelper:GetLoadAction (UnityEngine.RenderBuffer&)
    6. 0x000000004B80E06E (Mono JIT Code) [C:\buildslave\unity\build\Runtime\Export\Graphics.cs:36] UnityEngine.RenderBuffer:get_loadAction ()
    7. 0x000000004B80E1E9 (Mono JIT Code) (wrapper runtime-invoke) <Module>:runtime_invoke_RenderBufferLoadAction_RenderBuffer* (UnityEngine.RenderBuffer*,intptr,intptr,intptr)
    8. 0x00007FF9CD815737 (mono) [c:\buildslave\mono\build\mono\mini\mini.c:4937] mono_jit_runtime_invoke
    9. 0x00007FF9CD768435 (mono) [c:\buildslave\mono\build\mono\metadata\object.c:2623] mono_runtime_invoke
    10. 0x00007FF9CD76E943 (mono) [c:\buildslave\mono\build\mono\metadata\object.c:3838] mono_runtime_invoke_array
    11. 0x00007FF9CD72CE33 (mono) [c:\buildslave\mono\build\mono\metadata\icall.c:2750] ves_icall_InternalInvoke
    12. 0x0000000000870737 (Mono JIT Code) (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (object,object[],System.Exception&)
    13. 0x000000000086E892 (Mono JIT Code) [/Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:222] System.Reflection.MonoMethod:Invoke (object,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo)
    14. 0x000000003F485B22 (Mono JIT Code) [/Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoProperty.cs:297] System.Reflection.MonoProperty:GetValue (object,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo)
    15. 0x000000003F4858EF (Mono JIT Code) [/Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoProperty.cs:283] System.Reflection.MonoProperty:GetValue (object,object[])
    16. 0x0000000044CB842F (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\Utilities\Reflection\MemberInfoExtensions.cs:85] Autelia.Serialization.MemberInfoExtensions:GetPropertyValue (System.Reflection.PropertyInfo,object)
    17. 0x0000000044CB17FA (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\Utilities\Reflection\MemberInfoExtensions.cs:29] Autelia.Serialization.MemberInfoExtensions:GetValue (System.Reflection.MemberInfo,object)
    18. 0x0000000044CABB33 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:454] Autelia.Serialization.Utilities.SceneCrawler:GetReferencedObjectsFromMembers (object,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    19. 0x0000000044CB62D7 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:523] Autelia.Serialization.Utilities.SceneCrawler:HandleMember (object,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    20. 0x0000000044CBBDC0 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:564] Autelia.Serialization.Utilities.SceneCrawler:AddReferenceCollection (System.Collections.ICollection,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    21. 0x0000000044CB57BF (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:475] Autelia.Serialization.Utilities.SceneCrawler:HandleMember (object,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    22. 0x0000000044CABB8F (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:455] Autelia.Serialization.Utilities.SceneCrawler:GetReferencedObjectsFromMembers (object,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    23. 0x0000000044CB62D7 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:523] Autelia.Serialization.Utilities.SceneCrawler:HandleMember (object,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    24. 0x0000000044CBBDC0 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:564] Autelia.Serialization.Utilities.SceneCrawler:AddReferenceCollection (System.Collections.ICollection,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    25. 0x0000000044CB57BF (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:475] Autelia.Serialization.Utilities.SceneCrawler:HandleMember (object,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    26. 0x0000000044CABB8F (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:455] Autelia.Serialization.Utilities.SceneCrawler:GetReferencedObjectsFromMembers (object,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    27. 0x0000000044CAA3CA (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:400] Autelia.Serialization.Utilities.SceneCrawler:GetReferencedUnityObjects (UnityEngine.Object,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    28. 0x0000000044CA0155 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:377] Autelia.Serialization.Utilities.SceneCrawler:GetReferencedUnityObjectsFromGameObject (UnityEngine.GameObject,System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,System.Collections.Generic.HashSet`1<UnityEngine.Object>,System.Collections.Generic.HashSet`1<UnityEngine.Object>)
    29. 0x0000000044C9FAE4 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:353] Autelia.Serialization.Utilities.SceneCrawler:GetLoadedObjects (System.Collections.Generic.IEnumerable`1<UnityEngine.GameObject>,Autelia.Serialization.Utilities.SceneCrawler/ObjectCategories,System.Collections.Generic.HashSet`1<UnityEngine.Object>&,System.Collections.Generic.HashSet`1<UnityEngine.Object>&,bool)
    30. 0x0000000044C98A3D (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Utilities\SceneCrawler.cs:316] Autelia.Serialization.Utilities.SceneCrawler:GetLoadedObjects (UnityEngine.SceneManagement.Scene,Autelia.Serialization.Utilities.SceneCrawler/ObjectCategories,System.Collections.Generic.HashSet`1<UnityEngine.Object>&,System.Collections.Generic.HashSet`1<UnityEngine.Object>&)
    31. 0x0000000044C96F10 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Configuration\Registries\PersistentRegistry.cs:942] Autelia.Serialization.PersistentRegistry:TakeSceneCensus (UnityEngine.SceneManagement.Scene,bool)
    32. 0x0000000044C94CA1 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Configuration\Registries\PersistentRegistry.cs:816] Autelia.Serialization.PersistentRegistry:TakePersistentCensus (System.Collections.Generic.IEnumerable`1<UnityEngine.SceneManagement.Scene>,System.Action,System.Action)
    33. 0x0000000044C93693 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Configuration\Registries\PersistentRegistry.cs:799] Autelia.Serialization.PersistentRegistry:RequestCensus (bool,System.Action`1<int>,System.Action`1<Autelia.Serialization.PersistentRegistry>,System.Action`1<Autelia.Serialization.PersistentRegistry>)
    34. 0x0000000044C862F8 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\Configuration\Registries\PersistentRegistry.cs:964] Autelia.Serialization.PersistentRegistry:Refresh (System.Action`1<int>)
    35. 0x0000000044C85F39 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\UI\Editor\SerializationWindow.cs:763] Autelia.Serialization.SerializationWindow:RefreshPersistentRegistry ()
    36. 0x0000000044C354CF (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\UI\Editor\SerializationWindow.cs:458] Autelia.Serialization.SerializationWindow:DrawProjectView ()
    37. 0x0000000041253E09 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\UI\Editor\SerializationWindow.cs:222] Autelia.Serialization.SerializationWindow:OnGuiEditorMode ()
    38. 0x00000000412536F6 (Mono JIT Code) [C:\work\svn\Robots\trunk\Assets\External assets\Autelia\AllSave Pro\UI\Editor\SerializationWindow.cs:159] Autelia.Serialization.SerializationWindow:OnGUI ()
    39. 0x00000000008A7122 (Mono JIT Code) (wrapper runtime-invoke) object:runtime_invoke_void__this__ (object,intptr,intptr,intptr)
    40. 0x00007FF9CD815737 (mono) [c:\buildslave\mono\build\mono\mini\mini.c:4937] mono_jit_runtime_invoke
    41. 0x00007FF9CD768435 (mono) [c:\buildslave\mono\build\mono\metadata\object.c:2623] mono_runtime_invoke
    42. 0x00007FF9CD76E943 (mono) [c:\buildslave\mono\build\mono\metadata\object.c:3838] mono_runtime_invoke_array
    43. 0x00007FF9CD72CE33 (mono) [c:\buildslave\mono\build\mono\metadata\icall.c:2750] ves_icall_InternalInvoke
    44. 0x0000000000870737 (Mono JIT Code) (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (object,object[],System.Exception&)
    45. 0x000000000086E892 (Mono JIT Code) [/Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:222] System.Reflection.MonoMethod:Invoke (object,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo)
    46. 0x000000001718A32F (Mono JIT Code) [/Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MethodBase.cs:115] System.Reflection.MethodBase:Invoke (object,object[])
    47. 0x0000000023B2D355 (Mono JIT Code) [C:\buildslave\unity\build\Editor\Mono\HostView.cs:262] UnityEditor.HostView:Invoke (string,object)
    48. 0x0000000023B2D1F7 (Mono JIT Code) [C:\buildslave\unity\build\Editor\Mono\HostView.cs:255] UnityEditor.HostView:Invoke (string)
    49. 0x000000003F540B73 (Mono JIT Code) [C:\buildslave\unity\build\Editor\Mono\HostView.cs:222] UnityEditor.HostView:InvokeOnGUI (UnityEngine.Rect)
    50. 0x000000003F52FE3D (Mono JIT Code) [C:\buildslave\unity\build\Editor\Mono\GUI\DockArea.cs:346] UnityEditor.DockArea:OnGUI ()
    51. 0x00000000008A7122 (Mono JIT Code) (wrapper runtime-invoke) object:runtime_invoke_void__this__ (object,intptr,intptr,intptr)
    52. 0x00007FF9CD815737 (mono) [c:\buildslave\mono\build\mono\mini\mini.c:4937] mono_jit_runtime_invoke
    53. 0x00007FF9CD768435 (mono) [c:\buildslave\mono\build\mono\metadata\object.c:2623] mono_runtime_invoke
    54. 0x00000001410645B5 (Unity) scripting_method_invoke
    55. 0x0000000141059DF1 (Unity) ScriptingInvocation::Invoke
    56. 0x0000000140D01F9F (Unity) MonoBehaviourDoGUI
    57. 0x0000000140CF4C40 (Unity) IMGUIModule::MonoBehaviourDoGUI
    58. 0x00000001414A0A2D (Unity) MonoBehaviour::DoGUI
    59. 0x00000001417D69E3 (Unity) GUIView::OnInputEvent
    60. 0x000000014008F8B3 (Unity) GUIView::ProcessInputEvent
    61. 0x00000001417D23B3 (Unity) GUIView::ProcessEventMessages
    62. 0x00000001417D8485 (Unity) GUIView::GUIViewWndProc
    63. 0x00007FF9FA1FBC50 (USER32) CallWindowProcW
    64. 0x00007FF9FA1FB5CF (USER32) DispatchMessageW
    65. 0x00000001417F0A59 (Unity) CrashCallback
    66. 0x00000001417F2704 (Unity) WinMain
    67. 0x0000000141AD7444 (Unity) strnlen
    68. 0x00007FF9F88D2774 (KERNEL32) BaseThreadInitThunk
    69. 0x00007FF9FB090D61 (ntdll) RtlUserThreadStart
    70.  
    71. ========== END OF STACKTRACE ===========
    72.  
     
  17. TZYalcin

    TZYalcin

    Joined:
    Nov 14, 2013
    Posts:
    10
    hi i wasn't able to use it yet unity 5.6.0f3 i have sent the crash report to your e-mail.
     
  18. ProceduralJOYE

    ProceduralJOYE

    Joined:
    Dec 13, 2012
    Posts:
    111
    Sorry you've been having some problems with allSAVE. I've replied to your email; I expect that we should be able to find the source of this crash before long.
     
  19. ProceduralJOYE

    ProceduralJOYE

    Joined:
    Dec 13, 2012
    Posts:
    111
    The crash relates to an issue related to RenderBuffers that is already fixed in the next version. At the link at the foot of this post is a unity package that should resolve this issue. After importing the package (and if you haven't yet been able to generate registries), please make sure to press the 'Refresh Memento Registry' button under the Projects tab. If you don't press that button, then the patch will not have a full effect.

    RenderBuffer patch for allSAVE 1.0.1: https://drive.google.com/open?id=0B_2V6_6aNILpRkFoelpMUEJKTEE
     
    TZYalcin likes this.
  20. TZYalcin

    TZYalcin

    Joined:
    Nov 14, 2013
    Posts:
    10
    Thanks
     
  21. AshyB

    AshyB

    Joined:
    Aug 9, 2012
    Posts:
    189
    This product sounds fantastic. I've bought most of the serializer/save systems on the asset store and found many to be absolute trash. Always ended up just making my own which is a pain and I'm really dreading doing it for the project I'm currently working on. Yours actually looks like it might be the one for me. I shall add it to my list of things to buy :)

    Question, how exactly does it save the data? does it save all the data to a text file? Ideally i would like to have just one big string that i can i write to whatever i want.
     
  22. coverpage

    coverpage

    Joined:
    Mar 3, 2016
    Posts:
    385
    Yes I have a similar question, are there fields that we can use to choose what to serialize such as [Serializable] [NonSerializable] .
     
  23. ProceduralJOYE

    ProceduralJOYE

    Joined:
    Dec 13, 2012
    Posts:
    111
    The data is serialized by JSON.net and converted into a (optionally compressed and encrypted) byte array before being written to disk (or, in the next version, any target stream).

    The current version of allSAVE doesn't have fields of that kind. The first version of allSAVE was focused on delivering features that could be used by any Unity user, including those who are not comfortable reading or editing scripts. In the current version of allSAVE, you can control what is serialized through the use of an editor window. It has toggle boxes allowing you to enable/disable the serialization of fields & properties of any user type. By default, all fields are serialized in all types.

    The next version will deliver features that can be utilised by Unity users who are more comfortable writing and editing scripts. It will provide a SourceSelector that utilises [Serializable] and [NonSerializable] fields on properties/fields, and make it easier to write your own SourceSelectors. It also will provide [ExcludeFromSerialization] attributes that can be used on Component type definitions to exclude that Component and the entire GameObject to which it is attached.
     
    coverpage likes this.
  24. coverpage

    coverpage

    Joined:
    Mar 3, 2016
    Posts:
    385
    I have to purchase a bunch of low poly assets for my current project, but inevitably I will definitely purchase this asset in the near future. If you may, warn us before you do any price increase please :D
     
    ProceduralJOYE likes this.
  25. MarcopoloR

    MarcopoloR

    Joined:
    Feb 4, 2015
    Posts:
    114
    Hi, I purchased your asset today in the hopes of integrating it with my project which uses an asset called Ultimate Survival. It is a template for survival games. I tried your asset in a generic project I set up and it seemed to work fine. However, when I tried it in Ultimate Survival it would give me a whole bunch of error messages where it messed up the code in the other asset. For instance, it would not recognize unityengine.random and various other errors.
     
  26. ProceduralJOYE

    ProceduralJOYE

    Joined:
    Dec 13, 2012
    Posts:
    111
    HI Marco, I've not encountered an issue like that before. Could you send me your Unity Editor log in a direct message? There is some information on where to find your logs at the following link: https://docs.unity3d.com/Manual/LogFiles.html
     
  27. YusifJasim

    YusifJasim

    Joined:
    Apr 27, 2017
    Posts:
    4
  28. ransuz

    ransuz

    Joined:
    May 22, 2017
    Posts:
    5
    I'm thinking of buying.
    Does this support Android and iPhone?
    If not, can you tell me when it will be possible?
     
  29. ProceduralJOYE

    ProceduralJOYE

    Joined:
    Dec 13, 2012
    Posts:
    111
    Hi. allSAVE does not currently support Android nor iPhone. Adding support for other platforms is on the roadmap for version 1.4 or higher, depending on demand. Current version is 1.0.1, with 1.1 in progress.
     
  30. ransuz

    ransuz

    Joined:
    May 22, 2017
    Posts:
    5
    Thanks for the detailed answer :)
     
  31. IngeJones

    IngeJones

    Joined:
    Dec 11, 2013
    Posts:
    129
    Unity is telling me update 5.6.1f1 is waiting. Is this utility keeping pace with the updates or would it be better for me to come off the beta program if I want to use allsave?
     
  32. ProceduralJOYE

    ProceduralJOYE

    Joined:
    Dec 13, 2012
    Posts:
    111
    Hi Inge. Yes, you can upgrade to 5.6.1f1. There should be no issues with upgrading.
     
  33. calveym

    calveym

    Joined:
    Dec 6, 2016
    Posts:
    2
    Hi @ProceduralJOYE, I've just purchased your asset and I'm really liking it so far. I've had a couple issues with the setup however, that I hope you could help with. I am developing a game for SteamVR that has many objects created at runtime with a pretty complex set of behaviours associated with them. This is the main reason I am going for a pre baked solution like yours.

    I've got saving and loading working overall, and I know some data is persisting between loads, but the situation is quite weird. It will successfully reload the scene, as well as persisting data located on some of my singleton classes that exist before runtime, but only the gameobject that was most recently added at runtime is loaded, the rest of the runtime GOs load at the origin, with only one script attached. It is currently throwing errors about materials, saying that the shader that is used to recreate a material is missing. There is always an error when loading any runtime objects on MaterialMemento:25, so maybe it is losing a reference to a shader or something between the saving and loading.

    Any ideas how I could try to approach this? So far I thought that maybe too much is being serialized, but I am having trouble isolating a component or type. Any help would be greatly appreciated,

    Cheers,

    Mike

    Edit: Happy to provide logs and such if they would help.
     
    Last edited: Jun 19, 2017
  34. ProceduralJOYE

    ProceduralJOYE

    Joined:
    Dec 13, 2012
    Posts:
    111
    Thanks Mike, I've replied to your email.
     
  35. tosiabunio

    tosiabunio

    Joined:
    Jun 29, 2010
    Posts:
    115
    Any plans for mobile support? This would be extremely useful on mobiles for my project, as PC version has a simple save at the end of gameplay segment, but that isn't acceptable on mobiles as the segments take 10-15 minutes to finish.
     
  36. Duffer123

    Duffer123

    Joined:
    May 24, 2015
    Posts:
    1,215
    @ProceduralJOYE ,

    How goes the next update and how far off is the release? Will the next one be Unity 2017 compatible?
     
    ProceduralJOYE likes this.
  37. ProceduralJOYE

    ProceduralJOYE

    Joined:
    Dec 13, 2012
    Posts:
    111
    Version 1.1 is tantalisingly close to release. It'll feature innumerable bug-fixes, from major to minor, performance improvements (especially to the Editor window, which can be slow for some users), and the scripting API.

    Right now, I'm looking to add a convenience method for excluding objects by tag or by layer, but that's all the new features left to add.

    I'm working on a couple minor regressions and I want to write a couple of guides on how to use the new scripting API. After that, it'll be a matter of running the test suite and then release. We're looking at a time-frame of about a week.

    1.1.1 will be adding deep serialization for meshes (about 2 weeks after 1.1), 1.1.2 will add deep serialization for sprites (about 2 weeks after 1.1.1) and 1.1.3 will be looking at adding support for new features of Unity 2017.
     
    TeagansDad likes this.
  38. Duffer123

    Duffer123

    Joined:
    May 24, 2015
    Posts:
    1,215
    @ProceduralJOYE ,

    Excellent! Also, don't forget Playmaker support... 1.1.4? ;)
     
    ProceduralJOYE likes this.
  39. ProceduralJOYE

    ProceduralJOYE

    Joined:
    Dec 13, 2012
    Posts:
    111
    Don't worry, I've not forgotten Playmaker support. Think a lot of people are waiting for this.
    Playmaker support is planned for 1.3.

    But don't panic! 1.1 is probably the biggest single update that allSAVE will see. Updates after 1.1 should be much faster. 1.2, in particular, should be quite fast - it'll just be a matter of providing a user interface for functionality that's already available through the scripting API.

    Then I can get on with Playmaker. ;)
     
  40. Duffer123

    Duffer123

    Joined:
    May 24, 2015
    Posts:
    1,215
    Good stuff.
     
  41. Trusty

    Trusty

    Joined:
    Sep 7, 2013
    Posts:
    16
    Hello there.

    This asset looks like what I need but just to be sure before buy it :
    I want to allow the player to save / load his game, my game is already all finish I don't need to save scene to work on in editor. So I'll add a save button / input, click by the player -> your asset will do the magic and save a file -> and then the player will exit the game, come back later, click on a load button link to your magic -> your asset will do the reversed magic -> tatamm, with all my customs objects ? That mean the player will have some .unity file in his game folder ? Or does it save binary ?

    Maybe idiot questions but some assets I tried just save scene for the editor what is pretty useless for me. Thanks in advance !
     
  42. ProceduralJOYE

    ProceduralJOYE

    Joined:
    Dec 13, 2012
    Posts:
    111
    Hi Trusty, yes, you're correct. allSAVE is not a tool for saving the scene in the editor. allSAVE is a tool that is used for saving and loading games at runtime. It offers the save/load functionality that will be expected in a game by the end-user.

    Out of the box, it supports configurable quicksave, autosave and manual saving (using a menu). There are some example prefabs for menus, but the process is essentially to add a SerializerHook component to some GameObject and rig up the button to call the Save() and Load() methods. That's all there is to it.

    allSAVE will create a savefile in the User's personal folder (default), Unity's persistent data folder, or at the local directory of the application. By default, allSAVE creates savefiles with a .sav extension, but that extension may be changed to anything you'd like through the settings panel of the allSAVE editor window.

    For support, you can contact me directly by email at tools@autelia.com or here. If you email me and provide me with an invoice number, I can also provide you a beta of the next version. I highly recommend the beta, if you are not intending to release your game within the next two weeks.

    I will be away from the computer and unable to check my emails (or the forum) until Monday, but if you have any support questions then please send them my way.
     
  43. ProceduralJOYE

    ProceduralJOYE

    Joined:
    Dec 13, 2012
    Posts:
    111
    Oops. Forgot to mention, for longtime users.

    Development on 1.1 is pretty much wrapped up now. I was running some tests to make sure that I hadn't introduced some performance issues and saw a few opportunities for optimisation. More tests still need to be done, but the provisional results of my optimisation are anywhere between 2-8x less garbage allocation in 1.1 as compared to 1.0.1 (so, garbage allocation down to 12.5%-50% of previous). :)
     
  44. pushingpandas

    pushingpandas

    Joined:
    Jan 12, 2013
    Posts:
    1,418
    Looks great. I need something that have LOAD and SAVE buttons and saved games are visualize by screenshots. Could that be achrived? Can you provide a tutorial?
     
  45. Trusty

    Trusty

    Joined:
    Sep 7, 2013
    Posts:
    16
    Awesome ! I'm not in a hurry but will definitely get your asset soon :) Thanks for the mail, I'll keep it in mind.

    An other question come to my mind : Do you manage singleton ? Assuming I have several persistent singleton, they will be on the scene before the load, will they be updated ? Won't it lead to a conflict ? More generally, do you manage assets with -dontdestroyonload- ? Is it possible to choose wich one have to be update to the save-state and wich have to stay the current way ?

    Thanks again ! :)
     
    Last edited: Jul 23, 2017
  46. ProceduralJOYE

    ProceduralJOYE

    Joined:
    Dec 13, 2012
    Posts:
    111
    Yes, allSAVE is capable of taking screenshots directly before saving that may be used for providing a visualization in save/load menus. There is a system in allSAVE that can be used for inserting any kind of data into the header of a savefile (including screenshots). The way that this is done is by writing a custom HeaderProvider class.

    Fortunately, there is already an in-built HeaderProvider named PreviewHeaderProvider that can be used to capture screenshots and save them into the savefile header. The ModernMenu prefabs also demonstrate how to read screenshots back.

    For singletons, the way that they are handled depends upon the way that they are implemented. In the case of singleton-like Components which implement an accessor for the instance, the singleton GameObject will be deleted and replaced with a new singleton with the state saved in the Savefile. If the singleton is present at edit time, then the singleton will not be deleted but will have its state updated.

    If you want to prevent a singleton from being updated, you can use the allSAVE editor window to exclude that type from serialization operations by turning off the toggle against the class name. In 1.1, you will be able to use the [ExcludeFromSerialization] attribute to achieve the same at the code-level.

    Yes, objects in DontDestroyOnLoad state are managed in the same way as any other object.
     
  47. Duffer123

    Duffer123

    Joined:
    May 24, 2015
    Posts:
    1,215
    @ProceduralJOYE ,

    How goes it with the next update? Will it be compatible with latest stable Unity 2017?
     
  48. ProceduralJOYE

    ProceduralJOYE

    Joined:
    Dec 13, 2012
    Posts:
    111
    1.1 is looking good! I've finished everything that I wanted to do, ran the tests and fixed all known regressions. I've written a provisional changelog, and now I just need to run the tests again to make sure that I didn't introduct any regressions.

    There may still be some minor changes, but I'll put the current changelog up now so you can see broadly what has been added/improved/fixed.

    1.1:
    Features:
    * allSAVE now features a fully documented scripting API. [link to online docs goes here]

    * ContextLoaders added. [Add brief explanation here]

    * SourceSelectors added. [Add brief explanation here]

    * ExcludeFromSerialization attribute has been added. This may be used to indicate that a type should always be excluded from serialization and deserialization options. When this attribute is used with a component type, it may be additionally configured to indicate that allSAVE should not only ignore the component but also the GameObject itself, including all other attached components and all child objects.

    * The Serializer class now has a Logger property that may be assigned to enable the use of custom Loggers. By default, Serializer will use Unity's default logger (log to console).

    Improvements:
    * Massive performance improvements (again) while saving. [GET SOME METRICS]

    * Code is now fully documented with detailed comments throughout.

    * Error/Warning handling greatly improved. allSAVE will now attempt to continue saving/loading where possible, even after an error has been encountered.

    * Error/Warning logging greatly improved. Error messages are now much more meaningful and contain stack traces where appropriate.

    * The majority of allSAVE code has been moved into the Plugins directory. This is useful for when users want to write mementos for types that are in the Plugins directory.

    * Restructure the Project tab to show fewer buttons, enforcing correct behaviour when updating registries by making sure that all registries are updated together. The Persistent Registry and Memento Registry can no longer be updated independently of Scene Registries. allSAVE is fast enough now that the marginal time saved by updating registries independently is no longer significant.

    * Added TextMesh Pro support for the free version of TextMesh Pro. A package is included that may be imported to add TextMesh Pro support.

    * MeshMemento now supports serialization of primitives.

    * Substantial performance improvements in the allSAVE editor window. The window should scroll smoothly now even for very large projects.

    * Types lists shown in the allSAVE editor window may now be collapsed by namespace. In cases where over 500 types are listed, they will be collapsed by default.

    * The 'Apply All' patches button no longer patches scripts that have been disabled for serialization.

    * The AutoPatcher no longer attempts to patch UnityScript ('javascript') classes. A warning is presented instead.

    * AudioClips are (lossless) compressed before deep serialization. This reduces the amount of data that must be written to file.

    * MaterialMemento now retains a copy of the shader's name, which allows the shader to be found even if it isn't in the PersistentRegistry. Especially useful for Unity internal shaders.

    * The AutoPatcher now handles using aliases.

    * The AutoPatcher now handles Unity callbacks that are iterators.

    * Improved AutoPatcher's handling of assignment statements.

    * The AutoPatcher now logs a warning when a document cannot be found, rather than failing with an error.

    * Generic collection mementos now have implicit conversion operators.

    * AutoPatcher now has better handling of 3rd party assemblies; no longer attempts to patch types for which source code if not available.

    * TypeManifests added for Streams and StreamWriters.

    * Added a memento for WeakReferences.

    * Don't over-inspect string types. This was causing problems in assets that make extensive use of strings (e.g. MarkLight).

    * Added support for some Linq->XML classes.

    * Allow reference type mementos to indicated that they store items with value-type semantices. This allows us to prevent tracking references for reference types.

    * Add capability for SceneManager event handles to be serialized and deserialized.

    * Allow other classes to request that the Saver store Component->GameObject mappings for specific objects. This is used in CustomMemento for cases where CustomMemento inadvertently causes components to be spawned in the accessors of properties that it is inspecting.

    * CustomMemento now treats value types differently. It does not generate unnecessary Guids for value types and skips some unnecessary tests for better performance.

    * CustomMemento now stores the actual type of the member not the declared type.

    * Added TextGeneratorMemento.

    * Added BaseInputMemento.

    * Filepaths are now more consistently handled throughout allSAVE, in order for better behaviour on unsupported platforms.

    * Serializer configuration files are no longer generated as soon as the allSAVE editor window is opened. They will be generated on the first time that registries are generated.

    * Rework TypeManifests so that they use less memory and are easier to write in cases of types with base types.

    * DelegateBaseMemento now returns null in failure cases rather than an uninitialized delegate. It also stores the delegate type when serializing, which makes it more reliable during deserialization when delegates of compatible but not equal types are used together.

    * InvokeController is now a static class.

    * HeaderProviders now force certain properties to be present in save file headers. Information relating to the engine version, allSave version and product version are all required properties.

    * Change the format of the savefile to produce smaller files more quickly.

    Bugfixes:
    * Add RenderBuffer to the list of non-inspectable types. This fixes a CRASH error when inspecting RenderBuffers.

    * Prevent SceneCrawler and CustomMemento from attempting to inspect/serialize pointer types. This fixes a CRASH error when inspecting some third-party code.

    * Fix stack overflow error for value types that include a static value type member that results in a circular reference to that member.

    * allSAVE was not registering assets in Resources directories unless they had been loaded, causing assets to be missing from the PersistentRegistry.

    * Resolved error causing assets to be loaded in the constructor for Saver. This was causing Unit Tests to fail.

    * Fix field access error in MaskableGraphicMemento.

    * Fix error in registration of TypeManifests for generic type definitions.

    * Fix potential NullReferenceException in ScrollRectMemento for ScrollRect's that did not have an assigned viewport.

    * ResourceMementos no longer attempt to deep serialize ignored objects.

    * allSAVE no longer makes multiple attempts to reattach Rigidbody, Rigidbody2D, MeshFilter, CanvasRenderer, nor any type derived from UI.Graphic when those components are already present.

    * SceneCrawler more reliably identifies asset references when crawling scenes.

    * Resolve error preventing jagged arrays from being correctly deserialized.

    * TypeCrawler no longer returns some Unity internal members that allSAVE should not be writing to or reading from.

    * Fix casting errors in ArrayListMemento, QueueMemento and StackMemento.

    * Prevent MeshColliderMemento from setting the trigger property to true for concave MeshColliders. This is not a valid state for triggers in Unity 5+.

    * GradientMementos are now properly tracked as reference type mementos, not value type mementos.

    * Prevent TypeCrawler from returning multiple references to the same member, where the only difference between the references is the ReflectedType property.

    * Implemented workaround for an edge-case that can occur with Mono internal types representing reflected class information. This was causing an issue with MemberInfoMementos.

    * Fixed bug causing PropertyInfo and FieldInfo mementos to store the incorrect BindingFlags.

    * Fixed bug causing coroutines to be executed in the wrong phase when using 'yield return null' in the iterator block.

    * Fixed conflicting values in ExecutionPhases enum.

    * Prevent ConditionalSerializers from attempting to serialize/deserialize multiple times in cases where there are multiple instances of the ConditionalSerializer present.

    * Resolve false positives in the warning processor of the AutoPatcher. No longer shows false positives in types derived from UnityEngine.UI types.

    * AutoPatcher no longer attempts to replace type references in compiler-generated code.

    * AutoPatcher no longer gets confused by types with multiple declarations (e.g. a type with two definitions separated by mutually exclusive preprocessor defines).

    * Prevent CoroutineControllerMemento from attempting to serialize coroutines that are running on objects that have already been destroyed.

    * allSAVE now looks at base classes before attempting to add more instances of a component during deserialization. This is necessary because DisallowMultipleComponent is an inherited attribute.

    * UnityEvents with UnityEngine.Object targets were only being serialized if the target method had a single parameter of type UnityEngine.Object. Fix it so that the parameter may be of any type derived from UnityEngine.Object.

    * InputFieldMemento no longer attempts to serialize the Text Component as a TextMemento. This is because the Text Component may also be of types derived from Text Memento.

    * ResourceMementos now must all implement CreateInstance() methods. This is to prevent allSAVE from having to guess how to create new instances of resource types, which was inadventently causing objects with invalid states to be created.

    * allSAVE was sometimes leaving sub-sprites, sub-objects of prefabs, sub-textures and other nested assets out of the persistent registry. This is no longer the case.

    * SceneCrawler has been updated to more reliably pull extra resources out of RenderSettings.

    * Prevent FontMemento from attempting to restore materials to the internal Arial font. This was causing (temporary) corruption.

    * Fix NullReferenceException in SelectableMemento for when animation triggers are null.

    * Added TypeManifests for types derived from Selectable. This prevents pulling in a static list of Selectables, which can cause cross-scene references in scene registries.

    * Allow ParticleSystemModule mementos to create new modules using the Deserialize() method. This won't actually help to restore particle systems, but will resolve errors when restoring objects that hold copies of a module.

    * Make sure that resources have their references properly tracked during deserialization by using CreateInstance() before forcibly creating instances using Serializer.

    * CoroutineControllerMemento was not serializing mementos owned by types that are not MonoBehaviours. This was also causing a problem for static types.

    * Prevent Exception ocurring in the ToString() method of Snippets when dealing with snippets very close to the end of the file.

    * MeshColliderMemento no longer makes changes to MeshColliders except where strictly necessary. Making unnecessary changes can result in OnTriggerEnter/Exit callbacks being inadvertently triggered.

    * Persistent Registry now makes sure to include assets that are only references by other assets.

    * GameObjectMemento will only mark objects as DontDestroyOnLoad objects where they are also root objects. It is not valid to call DontDestroyOnLoad for objects that are not root objects.

    * Rigidbody mementos perform more operations in the post-serialization step for more reliable results.

    * CharacterControllerMemento will no longer attempt to set step-offset higher than height. This is not a valid state for a CharacterController.
     
    IngeJones likes this.
  49. Arrovs

    Arrovs

    Joined:
    Sep 23, 2014
    Posts:
    24
    How well this will work with assetbundle contents?
    I have big >4gb generated scene which loads most of content from assetbundles. Will in result it save all those assetbundles in save file making it enormously big? If i disable that from saving than i still need to write custom loader on top of this.
    How well it works with custom scriptable object assets? And Resource.Load contents?

    Will it get painfully tedious to customize all variables for all classes at editor saving ui as we have like thousand scripts or it will somehow not show all scripts in our project?
     
  50. ProceduralJOYE

    ProceduralJOYE

    Joined:
    Dec 13, 2012
    Posts:
    111
    Resources.Load contents works out of the box. allSAVE scans all assets when generating registries and will make sure that all resources are included. So, for example. if you load a Texture2D at runtime using Resources.Load then that Texture2D will be saved as a simple reference into the AssetDatabase and allSAVE won't need to write the whole texture into the savefile.

    Custom scripts and custom scriptable objects assets are supported out of the box. They will be included in the registries just like any other assets.

    By default, allSAVE will save all variables of all classes. This policy makes it more likely that allSAVE will be able to generate a working savefile on first use, at the cost of tending to overestimate the amount of data that needs to be saved. In version 1.1 (which should be uploaded in a few days, assuming no regressions pop up in the tests), you can use the [ExcludeFromSerialization] class attribute to completely disable a script from being saved. Otherwise, yes, you will need to use the editor saving ui to customize variables for your class (or you can write simple custom mementos, if you find it less tedious).

    With regards to AssetBundle contents, allSAVE probably will try to save the contents into your savefile as there is no way (that I know of) for allSAVE to determine that these are assets that have been retrieved through www. 1.1 will make it easier through the use of SourceSelectors but you're right that you will probably need to make some changes in order to accommodate for the AssetBundle. It may be possible to use the (in 1.1) SerializerUtility.Exclude() methods when you are loading assets from bundles in order to prevent them from appearing in the savefile and to do the same in a SceneLoaderContext in order to prevent attempts to load, but you will need to experiment with the results.