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

Amazingly Easy - Free Save Game Manager - Unity Serializer now on Version 0.7

Discussion in 'Made With Unity' started by whydoidoit, Jun 24, 2012.

  1. incenseman

    incenseman

    Joined:
    Nov 20, 2012
    Posts:
    90
    The real issue is that the video has options that the program that I have doesn't have. The pic I posted does not look like the program in the video so I cannot do what the video says to do. There in lies my dilemma.
     
  2. whydoidoit

    whydoidoit

    Joined:
    Mar 12, 2012
    Posts:
    365
    Um, that's really not right. What option do you think is missing? That is exactly the code that was used to make the video.
     
  3. whydoidoit

    whydoidoit

    Joined:
    Mar 12, 2012
    Posts:
    365
    The only think not in that package is the ClickMeAndDie script which is used only in AngryBots and has no visual options.
     
  4. whydoidoit

    whydoidoit

    Joined:
    Mar 12, 2012
    Posts:
    365
    I am using Unity 4 in the video - but again, that has nothing to do with the saving and loading.

    You've added the PauseMenu.js file to your SaveGameManager (like I do in the video?)
     
  5. incenseman

    incenseman

    Joined:
    Nov 20, 2012
    Posts:
    90
    I did finally get the default first screen in the video but it not as easy to use if you have a ton of dynamic objects in the level.

    My only issue now is how to save and load.

    I noticed that if the mouse is captured by the game there is no way to click the save button. Can the script for the save menu be made to capture the mouse while on that menu and when the game resumed the mouse is again captured by the game? I have tried some options but nothing seemed to work.
     
    Last edited: Dec 11, 2012
  6. whydoidoit

    whydoidoit

    Joined:
    Mar 12, 2012
    Posts:
    365
    The PauseMenu stuff is just an example - I'm presuming most developers would want to use whatever GUI system they employ to build a pause/save game menu - though I'm considering building a proper system for NGUI (which is my package of choice). The idea is that you use the code in PauseMenu or TestSerialization to create your own system - it's pretty easy.

    AngryBots has over 1700 moving/stored objects in it - it's all down to how your level is organised. You have to attach a script to the prefabs or to the scene items, and have a SaveGameManager, that's the only requirements. If your stored objects are children of other game objects then you can just click the + Children buttons to set all of them to be saved, or select them all in the hierarchy, or by dragging in the scene view and again the wizard will give you the option to configure all of the selected items with a single click - though I would recommend that you only do store the things that really require saving.
     
  7. incenseman

    incenseman

    Joined:
    Nov 20, 2012
    Posts:
    90
    I did get the menu to come up and the save button is there but when I hit the "P" to bring up the menu the mouse is still captured by the game. I just figured since it is your project you would know best how to have the mouse freed to be used on the save menu. Like I said I tried several things that have not worked. A few thing broke it good and I have to fix it again. This being a community of people that lend help to each other I was hoping to find some help with it.

    I am currently using this script. How would I get it to also bring up the save menu?
    -------------------------------------------------------------
    function Start ()
    {
    // Start out in paused mode in web player

    if (Application.platform == RuntimePlatform.OSXWebPlayer ||
    Application.platform == RuntimePlatform.WindowsWebPlayer)
    {
    SetPause(true);
    }
    else
    {
    SetPause(false);
    Screen.lockCursor = true;
    }
    }

    function OnApplicationQuit ()
    {
    Time.timeScale = 1;
    }

    function SetPause (pause : boolean)
    {
    Input.ResetInputAxes();
    var gos : Object[] = FindObjectsOfType(GameObject);
    for (var go : GameObject in gos)
    go.SendMessage("DidPause", pause, SendMessageOptions.DontRequireReceiver);

    transform.position = Vector3.zero;

    if (pause)
    {
    Time.timeScale = 0;
    transform.position = Vector3 (.5, .5, 0);
    guiText.anchor = TextAnchor.MiddleCenter;
    }
    else
    {
    guiText.anchor = TextAnchor.UpperLeft;
    transform.position = Vector3(0, 1, 0);
    Time.timeScale = 1;
    }
    }

    function DidPause (pause : boolean)
    {
    if (pause)
    {
    // Show the button again
    guiText.enabled = true;
    guiText.text = "Click to start playing";
    }
    else
    {
    // Disable the button
    guiText.enabled = true;
    guiText.text = "Escape to show the cursor. 1 - Machine Gun. 2 - Rockets. Spacebar - Jump";

    }
    }

    function OnMouseDown ()
    {
    // Lock the cursor
    Screen.lockCursor = true;
    }

    private var wasLocked = false;

    function Update ()
    {
    if (Input.GetMouseButton(0))
    Screen.lockCursor = true;

    // Did we lose cursor locking?
    // eg. because the user pressed escape
    // or because he switched to another application
    // or because some script set Screen.lockCursor = false;
    if (!Screen.lockCursor wasLocked)
    {
    wasLocked = false;
    SetPause(true);
    }
    // Did we gain cursor locking?
    else if (Screen.lockCursor !wasLocked)
    {
    wasLocked = true;
    SetPause(false);
    }
    }
    ----------------------------------
     
  8. whydoidoit

    whydoidoit

    Joined:
    Mar 12, 2012
    Posts:
    365
    You would take the OnGUI code from PauseMenu.js and use it when the game was paused. Just kinda merge it with that code.
     
  9. incenseman

    incenseman

    Joined:
    Nov 20, 2012
    Posts:
    90
    I guess the problem that I have is that I am getting the idea of scripting but don't know enough yet to know how to do this certain thing.

    Not knowing your script as well as you do I am a little stuck.
     
  10. whydoidoit

    whydoidoit

    Joined:
    Mar 12, 2012
    Posts:
    365
    So to be clear you want to take that code that you wrote and embed the US pause menu it it?

    The script you have there is locking the cursor, which I know little about I'm afraid. I guess that it's Screen.lockCursor = false to turn it off.

    Like I said from my pause menu all you need to do is provide an option to save the game and to load in previously saved games:

    Code (csharp):
    1.  
    2.     if(GUILayout.Button("Save Game"))
    3.     {
    4.        LevelSerializer.SaveGame("Your Game Name");
    5.     }
    6.    
    7.     for(var sg in LevelSerializer.SavedGames[LevelSerializer.PlayerName]) {
    8.        if(GUILayout.Button(sg.Caption)) {
    9.          sg.Load();
    10.          Time.timeScale = 1;
    11.          }
    12.     }
    13.  
     
  11. incenseman

    incenseman

    Joined:
    Nov 20, 2012
    Posts:
    90
    Thanks for the info. I will continue to whack away at it and ask around about the scripting. I appreciate the input you did provide.
     
  12. Tim-A

    Tim-A

    Joined:
    Apr 6, 2012
    Posts:
    10
    Is there a way to make a GUI button to delete saved games. Like LevelSerializer.DeleteSavedGames();
     
  13. whydoidoit

    whydoidoit

    Joined:
    Mar 12, 2012
    Posts:
    365
    Sure if you just manipulate the LevelSerializer.SavedGames list and then call LevelSerializer.SaveDataToPlayerPrefs() that lets you do what you like:

    Code (csharp):
    1.  
    2. if(GUILayout.Button("Delete All"))
    3. {
    4.      LevelSerializer.SavedGames.Clear();
    5.      LevelSerializer.SaveDataToPlayerPrefs();
    6.      PlayerPrefs.Save();
    7. }
    8.  
     
  14. Rolands

    Rolands

    Joined:
    Aug 15, 2010
    Posts:
    90
    could you plz show some simple example haw to use this--> static string LevelSerializer.SerializeLevel ()
    (this is a noob qvestion) and haw to load it back
     
  15. whydoidoit

    whydoidoit

    Joined:
    Mar 12, 2012
    Posts:
    365
    Well you need to attach storage scripts to the objects that you want to save (see the Getting Started Guide for which to choose for each type of object).

    Basically -> StoreInformation on anything that is already in the scene, needs to be saved or is the parent of something that will be created at runtime.
    -> PrefabIdentifier on anything that is instantiated as a prefab (it's children if it has them may well need StoreInformation scripts attached to them).

    Then something like:

    Code (csharp):
    1.  
    2. PlayerPrefs.SetString("SavedGame", LevelSerializer.SerializeLevel());
    3.  
    4. LevelSerializer.LoadSavedLevel(PlayerPrefs.GetString("SavedGame"));
    5.  
     
  16. Rolands

    Rolands

    Joined:
    Aug 15, 2010
    Posts:
    90
    tnx you
    one more qvestion documentation says "there
    *are
    *20
    *slots
    *per
    *player. "
    is there way to increse or set value of thies slots, becose i need like 100 save slots or more
     
  17. whydoidoit

    whydoidoit

    Joined:
    Mar 12, 2012
    Posts:
    365
    If you use SerializeLevel then you are responsible for storing the resulting string and can save as many as you like.

    If you use LevelSerializer.SaveGame then the saves are stored in LevelSerializer.SavedGames (keyed off the player's name) - so LevelSerializer.SavedGames["Mike"] is a list of the saved games for Mike.

    You set the player name with LevelSerializer.PlayerName (defaults to "" - which is fine if you don't have the concept of different player's save)

    SavedGames has a maximum number of slots, defaults to 20, which can be configured using LevelSerializer.MaxGames.
     
  18. Rolands

    Rolands

    Joined:
    Aug 15, 2010
    Posts:
    90
    i have some more questions. so i have no problems geting my data saved whit LevelSerializer.SavedGames to playerprefs but problem is i need to save lots of data form webplayer and form webplayer playerprefs are limited to 1mb, so i am trying to save date to json file or just file to server, but it dosent seam to work.
    So as i understand this-->JSONLevelSerializer.SerializeLevelToServer("ftp://whydoidoit.net/testIt.json", "testserializer", "T3sts3rializer"
    shold save all objects that have scripts StoreInformation and PrefabIdentifier attached, but is not saving anything. is it? i am not sure and i try to load like this --> LevelSerializer.LoadSavedLevelFromServer("ftp://whydoidoit.net/testIt.json");
    any tips? what i am doing wrong? what should i do? should json file have some date in it? this part of this plugin needs a bit more info. i really need help whit this all
     
  19. whydoidoit

    whydoidoit

    Joined:
    Mar 12, 2012
    Posts:
    365
    Well you are saving it using JSON and loading it using binary. Use either JSONLevelSerializer or LevelSerializer not both of them...
     
  20. Rolands

    Rolands

    Joined:
    Aug 15, 2010
    Posts:
    90
    but it still it dosent solve problem whit saving. json file is emty.
     
  21. kenlem

    kenlem

    Joined:
    Oct 16, 2008
    Posts:
    1,630
    Hi Mike,

    The serializer is really powerful and easy to use. Thanks for releasing it.

    I’m have rooms setup and working properly. Now I’d like to move objects from room to room. When I pick up and object, I turn its renderer and rigidbody off and parent the object under my player. My player has Store Information and DontStoreInRoom components. I think add a DontStoreInRoom component to the object I just picked up. Next, I move to the next room and drop the object. I reenable the rigidbody and renderer and unparent it from the player and remove the DontStoreInRoom component.

    If I then leave the room and come back, the new object is where it’s supposed to be but it’s texture is missing. If I leave the room and reenter, the object is now gone.

    First, is it possible to move and object from room to room? Second, is there something I need to do when I bring and object into a new scene? Do I need to refresh what objects the SaveGameManager is tracking? The object is a prefab with a prefab identifier on it.

    Any help would be appreciated.

    Regards,

    Ken
     
  22. Rolands

    Rolands

    Joined:
    Aug 15, 2010
    Posts:
    90
    hi agen
    is it posible to set default position where date to file is serialized, as far as i understand default is someting like this (and it works nice) /Users/Andrito/Library/Caches/Aduu/unity_testam_seivi . if i try to do like this -->LevelSerializer.SerializeLevelToFile("/Users/Andrito/fails.txt"); then here is no date in file. tips? what should i do?
     
  23. whydoidoit

    whydoidoit

    Joined:
    Mar 12, 2012
    Posts:
    365
    So it saves to the persistentDataPath always (because you can't write outside that normally).

    You can use ../../ etc to move back up the hierarchy, but it's there to protect against accidentally trying to do something that isn't allowed

    If you want to just save the data anywhere then you can using System.IO and File.WriteAllBytes or File.WriteAllText to save out the data and then that can go anywhere. (Using the normal functions to get a byte array or a string)
     
  24. I am da bawss

    I am da bawss

    Joined:
    Jun 2, 2011
    Posts:
    2,574
    Hey Mike, not sure which one to post this (you have 3 threads here :D) anyway - when I started a new project and noticed I now have FOUR Unity Serializer packages by default when I am starting a project - so I went to the directory where Asset Store store the packages and found there are 4 Unity Serializer packages there :

    Save Game-JSONBinary.unitypackage
    Save Game-JSON Binary.unitypackage
    Save Game-Unity Serializer.unitypackage
    Unity Serializer - Save Game.unitypackage


    I am just wondering does Unity Serializer need all those packages to work? :D
    Can I delete some of them? I am guessing only one of them is required?
     
  25. Vasir_

    Vasir_

    Joined:
    Jan 5, 2013
    Posts:
    13
    I just wanted to say thanks for the serializer. It's great.

    One question, I'm working on a game with another programmer. I'm not familiar with Navmesh, but his navmesh/ animations don't start when the game loads. They don't even move, either. They just stand idle.
    I get
    And
    I have tried googling this extensively and I found an early post where you have said:


    You also mentioned you had an example with navmesh, but I couldn't find it.
    I used OnDeserialize and placed
    Code (csharp):
    1. void OnDeserialized(){
    2.         agent.SetDestination(Waypoints[currentWaypoint].position);
    3.        
    4.     }
    Do you have any ideas what I am doing wrong?
     
    Last edited: Mar 25, 2013
  26. F O_X GO

    F O_X GO

    Joined:
    Apr 18, 2013
    Posts:
    1
    Can I use This Save script on my project?
     

    Attached Files:

  27. Rasmus Linden

    Rasmus Linden

    Joined:
    Jan 26, 2013
    Posts:
    10
    Yes, you can.
     
  28. LazyGoat

    LazyGoat

    Joined:
    Jan 26, 2013
    Posts:
    56
    Hi, I am a total beginner with serialization, so please excuse ignorance.

    I have a little project i made that needs to save ONE game object in one scene and then load it into another scene. this game object could have many children and it’s children could have children, but not always. So basically the player would construct the game object and then load it in the play scene to use. When the load button is pressed a list would be displayed of all the available saves to be loaded. the loaded game object would spawn at the spawner.

    Can anyone help me with this?
     
  29. frankrs

    frankrs

    Joined:
    Aug 29, 2009
    Posts:
    300
    thank you for this plugin its really brilliant
     
  30. AlanGameDev

    AlanGameDev

    Joined:
    Jun 30, 2012
    Posts:
    437
    Hello guys, any ideas if this plugin will solve the problem I'm having here: http://forum.unity3d.com/threads/22...sical-properties-and-forces-of-rbs-and-joints

    Long story short: I need to save and load a scene with physical forces exactly as it's being simulated, for example, I need a way to somehow 'restore' joints forces and stuff, I couldn't do it by myself and at the moment I'm trying to somehow save the objects in sleep mode but I couldn't actually restore everything exactly while it was...

    The latest release mentions something about joints, but I don't want to use it before I'm sure it will do the job, so, perhaps someone can confirm me.

    Thank you in advance.
     
  31. AlanGameDev

    AlanGameDev

    Joined:
    Jun 30, 2012
    Posts:
    437
    Hello there.

    I've tested this plugin and it didn't solve my problem :(. It has the same issue as my own solution (see my topic linked above for more info).
     
  32. WILEz1975

    WILEz1975

    Joined:
    Mar 23, 2013
    Posts:
    368
    Hello … sorry for my bad English. I’m Italian.
    I have a small problem with the rescue with unity-serializer.

    When things are to be saved beyond a certain point i do not make more saving.
    The savegame appears in “Pausemenu” when i saving, but then when i reload the scene is no more, has disappeared.
    This happens if i exceed a certain limit of objects and variables to be saved.

    How can I fix? There is a limit of material can be saved?

    Help please, i need extreme.
    I build my game around Unity-Serialize … This is a video of my game (i’m working on about a year):

    R4F on IndieDB

    I do not have any kind of error, but when you increase the GameObject to save (about 50, is the items to be installed on the car) saving is not the case. But it does not depend on particular errors because if i delete some items saving is ok without problems.

    Any idea?

    Your answer is my only opportunity to continue my work, are days that i try to solve this problem alone, but without success.
    Please reply me :/
     
  33. whydoidoit

    whydoidoit

    Joined:
    Mar 12, 2012
    Posts:
    365
    Ok I'm not sure what is going on. You can have any number of items saved, so the problem must be something to do with the interaction between objects or a "dodgy" object that is getting added when you get to that part of your game.

    What are you seeing in the console when the failure happens?
     
  34. Antigono

    Antigono

    Joined:
    Oct 20, 2013
    Posts:
    63
    thank you very much for this great contribution!
    Im sorry for my english,,
    I wonder if I can use this package to generate automated save games, where the player has no control over them.
    Which involves saving the game state at all times (or every "x" amount of time and when you exit the game).
    I dont understand in what way I could implement without impacting performance. or if exists an "ideal" way to do it.

    Thanks again!!
     
  35. whydoidoit

    whydoidoit

    Joined:
    Mar 12, 2012
    Posts:
    365
    Yes you could do that - but each save will take some time of course (normally between level saves or something where you can mask the time taken.

    The first save would certainly take longer than subsequent ones as it needs to cache all of the information about the objects to be stored - you might want to make this happen as the game starts.

    Unfortunately it is very hard to save over time on a thread as things are usually constantly changing.
     
  36. Antigono

    Antigono

    Joined:
    Oct 20, 2013
    Posts:
    63
    thanks for the reply, in my current project, I want if the player takes action, and then unplug the computer without saving, that action ust to be saved with no turning back.
    The style of save game to which I refer is applied in games like "dont starve" or "state of decay".
    I think the best way is to define the types of actions that must trigger a save and run the game save then.

    I will investigate a bit more! thank you!
     
    Last edited: Feb 11, 2014
  37. jd2400

    jd2400

    Joined:
    Feb 27, 2014
    Posts:
    1
    Hi Mike,

    I got a couple problems with this plugin if you can please help.

    Firstly when i save, I get a couple errors with 'Can't call GetPlaybackTime while not in playback mode. You must call StartPlayback before. ..etc' when i use the .Checkpoint() and .SaveGame() methods.

    Then when i load back with either .Resume() or .Load() , all my animations dont work get get non-stop warnings 'Animator has not been initialized' although I referenced it in Start() with playerAnim = GetComponent<Animator>(); .

    Any ideas how to solve these issues. I haven't found any solution yet. Thank you
     
  38. ARRCOMM1

    ARRCOMM1

    Joined:
    Aug 19, 2013
    Posts:
    44
    Looking all around for answer to this situation....
    I have your Save/Load system working Great. BUT, when all 20 slots are used, I want to Select a line to overwrite it and save a new situation.
    Where can I get information on this specific problem?
     
    Last edited: Mar 2, 2014
  39. charmandermon

    charmandermon

    Joined:
    Dec 4, 2011
    Posts:
    352
    Quick Request:

    Can you make a minimal dll of the UnitySerializer that I can just drop in the project without all the extra stuff. Really I just need the save scene features and I don't know what I can take out.

    HUGE THANKS!
     
  40. whydoidoit

    whydoidoit

    Joined:
    Mar 12, 2012
    Posts:
    365
    Sure, I'm trying to get my S*** together to get a new version out anyway. Will release it with and without the source.
     
  41. n8

    n8

    Joined:
    Mar 4, 2010
    Posts:
    147
    That would be awesome! I am trying to port my game to windows store/phone and I am getting some serious build errors. Thanks for this awesome plugin.

    One more question. I have an object that holds all of my major storage elements. I am saving that down to single file through the "saveobjecttreetofile". When I try to restore that file in another scene it just blows up. It says that it can't find the specific hash values that were used in the previous scene. For the time being I am just keeping that one object alive through scene loads, however it makes testing that individual scene difficult. Thanks again for your help!
     
  42. Epictickle

    Epictickle

    Joined:
    Aug 12, 2012
    Posts:
    431
    Support for this is completely dead... And, while I'm not mad about that since the asset is free anyways, it doesn't work with UFPS, the package I bought to build my FPS. So, if you're using UFPS, don't use this system. Or, if you do, prepare for the headache of your life, and PLEASE let me know how you did it.
     
  43. n8

    n8

    Joined:
    Mar 4, 2010
    Posts:
    147
    No I am not building an FPS. I don't know why it wouldn't be compatible with other systems on the asset store though. The basic premise is simple enough and built off of native serialization techniques. The real problem is that it seems that the pre-compiled dll files are transferable to the windows store/phone runtimes. Since those use a newer version of .net than Unity does that is where things are breaking. If WhydoIdoit will release the source, then most of these issue should be able to be fixed pretty quickly.
     
  44. kenlem

    kenlem

    Joined:
    Oct 16, 2008
    Posts:
    1,630
    I believe he has released the source for everything he has wrote himself and/or has the rights to release the source to. I think anything left is 3rd party.

    I've used the Serializer extensively. I have one shipping project with it (Chapter 2 in the iTunes store). I initially release the Android version with it but run into issues and had to rip it out. It, of course, doesn't work for Windows 8 because of differences in the runtime. I'll probably remove it from the iOS version the next time I update it on the store.

    I also spent abandoned another full project that was dependent on the Serializer because it got unpredictable as the project grew. I wasted 2-3 months of spare time fiddling with it and finally gave up. In the end, I redid the project and wrote my own simpler, more game specific seralizer in about a week of spare time. Now, if something goes wrong, I can fix it.

    My advise to you is forgot this asset. It's interesting and powerful but it's very complex internally and was impossible for me to support myself.
     
  45. n8

    n8

    Joined:
    Mar 4, 2010
    Posts:
    147
    I am starting to agree with you on that. The one thing that I loved about the asset, but is now giving the most grief, is the ability to generate a very unique id per object. The problem I am having is trying to save something in one scene and then loading that in a second scene.

    I have already wrote my own basic class serializer but it wasn't very efficient when trying to serialize multiple nested game objects. I may re-vist my personal one to see if I can get it fleshed out to be easier to use. In the meantime, if you have any reference material that I could read on creating my own serializer or how to just do persistent data in general, I would love to read it
     
  46. Tomleung

    Tomleung

    Joined:
    Oct 4, 2013
    Posts:
    27
    Code (csharp):
    1.  
    2.  for(var sg in LevelSerializer.SavedGames[LevelSerializer.PlayerName]) {
    3.        if(GUILayout.Button("Delete: " + sg.Caption)) {
    4.             sg.Delete();
    5.      }
    6. }
    7.  
    I tried to use the above codes to delete the saves but it shows one error :
    InvalidOperationException: Collection was modified; enumeration operation may not execute.

    How to solve it ?
     
  47. Carpe-Denius

    Carpe-Denius

    Joined:
    May 17, 2013
    Posts:
    842
    I'm not sure how it works in unity script, but you could change your
    for ( x in y)

    to

    for(int x=0;x<LevelSerializer.Length (or count... don't know);x++){
    if(..){
    LevelSerializer.SavedGames[LevelSerializer.PlayerName][x].Delete();
    x--;
    }
    }

    That way you don't change a currently iterating collection.
     
  48. Tomleung

    Tomleung

    Joined:
    Oct 4, 2013
    Posts:
    27
    I encounter two problems, one is that the above coding shows one error : 'Length' is not a member of 'LevelSerializer'.
    Another is that I don't know how to write the if condition. I have some confusability on this.
    Code (csharp):
    1.  
    2. for(var i = 0 ; i <LevelSerializer.Length ; i++){
    3.         if(???)){
    4.             LevelSerializer.SavedGames[LevelSerializer.PlayerName][i].Delete();
    5.             i--;
    6.         }
    7.     }
    8.  
     
    Last edited: May 3, 2014
  49. Tomleung

    Tomleung

    Joined:
    Oct 4, 2013
    Posts:
    27
    Code (csharp):
    1.  
    2. var sn = LevelSerializer.SavedGames[LevelSerializer.PlayerName];
    3.     for(var i = 0 ; i <sn.Count ; i++){
    4.         if(GUILayout.Button("Delete: " + sn[i].Caption)){
    5.             sn[i].Delete();
    6.             i--;
    7.         }
    8.     }
    9.  
    I use the above coding and the problem solved.
     
  50. kjuanlu

    kjuanlu

    Joined:
    Dec 4, 2011
    Posts:
    100
    Hello all

    First of all, congratulations for create this amazing tool, and thank you for give us the tool for free.

    I save my game on OnApplicationPause (android and iOS). I noticed that the serialized function takes around 1 seconds. I have a lot of objects, but some of them does not change between saves, for examen a new static object (decoration object that user puts on the terrain). I think I can gain some time reusing the serialized object instead of serialized it again.

    Is there any way to mark objects in order LevelSerialized does not serialize it again?

    Thanks in advance