Search Unity

Easy Save - The Complete Save & Load Asset for Unity

Discussion in 'Assets and Asset Store' started by joeltebbett, May 28, 2011.

  1. skinwalker

    skinwalker

    Joined:
    Apr 10, 2015
    Posts:
    289
    I tried this approach using a simple field and it worked, but my actual NpcDataContrainer is using nested lists serialized with Odin and nothing happens when I try it to load it, I dont even see an error.

    This is what the container looks like


    If I do something like this, the values are always the same as in the inspector even if I first save, change the values and try to load them, I can send you a demo scene if that will help.

    Code (CSharp):
    1.  
    2.             NpcDataContainer dataContainer = ES3.Load<NpcDataContainer>("container", Application.persistentDataPath + "/npcData.dat");
    3.  
    4.             foreach (var d in dataContainer.NpcData)
    5.             {
    6.                 Debug.Log(d.Id);
    7.                 Debug.Log(d.Health);
    8.                 Debug.Log(d.Stamina);
    9.             }
    Edit : I did some testing and my NpcData List has those attributes
    [NonSerialized] [OdinSerialize]

    I made a simple field and added the same attributes and it didnt work, it was always displaying the values from the inspector even though it should load them from the file, unfortunately I can't get rid of those attributes, because I want Odin to serialize it.
     
    Last edited: Aug 30, 2018
  2. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Hi there,

    If you want Easy Save to ignore the [NonSerialized] attribute, you will need to go to Window > Easy Save 3 > Types, search for your NpcDataContainer class in the search field, and then select the fields you wish to serialise from there.

    All the best,
    Joel
     
  3. skinwalker

    skinwalker

    Joined:
    Apr 10, 2015
    Posts:
    289
    I tried but when I search for my scripts nothing shows up. I am not sure if "ignore" is the right word, because I want to save the container then change it at runtime and when I hit load I want to get the last save's data. Currently when I load I am getting what is in the container at the current moment.

    Edit : I found it, but this is what I get, my List doesnt show because it has the NonSerialized attribute, it's serialized by Odin not Unity. Its the same thing as having a public int and it will show under Fields then if I click on it, it will act like my List serialized by Odin, so I guess Easy Save is not compatible with Odin.

     
    Last edited: Aug 31, 2018
  4. Devision4

    Devision4

    Joined:
    Jan 12, 2013
    Posts:
    1,287
    Is this asset compatible with quest machine and invector third person controller? If not. could you add compatiblty please
     
    wood333 likes this.
  5. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Hi there,

    Ah, I forgot that the Type pane also acknowledges the NonSerialized attribute.

    Usually you would manually modify the ES3Type file generated by the Type pane (located in Assets/Easy Save 3/Types), and add Read and Write calls for your field marked as NonSerialized. However, to save you some time I've PM'd you an update which ignores the NonSerialized attribute across Easy Save.

    All the best,
    Joel
     
  6. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Hi there,

    As we are not familiar with these assets, we are unable to say whether they are compatible. However, you can find information on what classes, fields and properties are supported in the Supported Types guide.

    As explicit support for these assets has not been requested before, I've added requests for these in our feature requests forum HERE and HERE.

    All the best,
    Joel
     
  7. berry4u

    berry4u

    Joined:
    Dec 27, 2017
    Posts:
    18
    Hi Joel,
    I'm a beginner with ES3, so unfortunately I can't run neither a small test saving a GameObject with its material correctly reloaded.
    I'm simply creating a cube by script with CreatePrimitive, saving it using ES3.Save<GameObject> and reloading with ES3.Load<GameObject> .
    The object is correctly reloaded but the material; indeed it is invisible the materials has no item moreover the mesh filter is not instantiated .
    This is due, I guess, to the unavailability of a material parameterless constructor.
    So I tried to edit the related ES3Type script instancing the material in ReadObject override with:
    var instance = new Material(Shader.Find("Standard"));
    and saving properties as color and so on, with no result.

    Is there a basic example to follow in order to save a gameobject and reload it with mesh/submesh and materials in a right way?

    Best Regards
    Berardo

    ps
    using Unity 2018.2.0f2
    ES version 3.0.2​
     
    Last edited: Sep 4, 2018
  8. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Hi there,

    It sounds like you might be encountering an issue which is resolved in the upcoming update. If you PM me your invoice number I'll send you over the update.

    All the best,
    Joel
     
  9. berry4u

    berry4u

    Joined:
    Dec 27, 2017
    Posts:
    18
    Installed the update but the result remains the same.
    My need is to save GameObjects with following components: Meshfilter, Mesh with submeshes, MeshRenderer, Materials and Collider.
    I tried to start from a trivial test: save a simple cube with only one material.
    To this point, I have to say that the documentation about examples (and I suppose that saving gameobjects is a frequent need in the unity3d context) is quite vague.
    Anyway I followed the guide (where I read: with Easy Save, GameObjects can be saved and loaded like any other object and a simple command will save components on the natively-supported types list).
    MeshFilter, Mesh (with submesh), MeshCollider and Material (not Materials) are on the list.
    So I wrote the simple test:
    go = GameObject.CreatePrimitive(PrimitiveType.Cube) as GameObject;
    ES3.Save<GameObject>("mykey", go, mypath + filename);
    run, back in editor mode and run again throwing the following command
    ES3.Load<GameObject>("mykey", mypath + filename);
    What I obtain is a cube with no MeshFilter and with no Material.
    What am I missing?

    Best Regards
    Berardo
     
    make-tafi likes this.
  10. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Hi Berado,

    Please could you send me a basic project and instructions to replicate this?

    All the best,
    Joel
     
  11. berry4u

    berry4u

    Joined:
    Dec 27, 2017
    Posts:
    18
    Just this script attached to an Empty Gameobject.
    I noted that the gameobject is correctly reloaded if I remain in the game, instead it isn't after quitting and reopening the game.

    Berardo
     

    Attached Files:

  12. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Hi Berado,

    Unfortunately I would need to see the scene, as it sounds like it may be an issue with how the references are gathered in the scene. Especially given that it only stops working after restarting the game.

    All the best,
    Joel
     
  13. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Thanks for sending over a project, I understand what is happening now.

    The Mesh and Material are saved by reference. However, as your material and cube is created at runtime, there's no reference to the materials or the cube's mesh when you reload the scene.

    Generally you should create a prefab of your GameObject and instantiate this, rather than constructing it at runtime. And then you would simply follow the Saving and Loading Prefab Instances section here. This ensures that all references exist, and also ensures that Components which cannot be serialised/deserialised are set to suitable default values.

    However, I've described below how you would achieve this if you cannot use prefabs.

    The easiest way to add a reference to the cube's mesh to the scene is simply to add a cube to your scene in the Editor. You can make this cube inactive so that it's not visible or using resources.

    With regards to the materials, you will need to save and load these separately so that they're saved by value. I've just emailed you an update which makes this much easier to do. After this update is installed, your example would look something like this:

    Code (CSharp):
    1. // Load the saved gameobject with the saved materials
    2. public void Loadgo()
    3. {
    4.     if (go != null) DestroyImmediate(go);
    5.     go = ES3.Load<GameObject>(id);
    6.     go.GetComponent<Renderer>().materials = ES3.Load<Material[]>(id+"mats");
    7. }
    8.  
    9. // Save the gameobject with attached components
    10. public void Savego()
    11. {
    12.     ES3.Save<GameObject>(id, go);
    13.     ES3.Save<Material[]>(id+"mats", go.GetComponent<Renderer>().materials);
    14. }
    All the best,
    Joel
     
  14. berry4u

    berry4u

    Joined:
    Dec 27, 2017
    Posts:
    18

    Thanks a lot Joel

    I really appreciate your responsiveness.
    Anything worked perfectly now. I want to add ,for the readers, that of course the cube sample can be extended to gameobjects with procedurally generated meshes simply adding two line of code as shown below.

    Best Regards
     

    Attached Files:

    • Code.cs
      File size:
      638 bytes
      Views:
      297
    make-tafi likes this.
  15. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Glad to hear it's all working for you now. Let me know if you run into any other problems!

    All the best,
    Joel
     
  16. berry4u

    berry4u

    Joined:
    Dec 27, 2017
    Posts:
    18
    Hi there
    I was wondering whether there is a viable way to save a GameObject without its children.

    Thanks
    Berardo
     
  17. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Hi Berardo,

    I've sent you an update which stops children from being saved by default. This will also be the default behaviour in the upcoming version, as it makes more sense for it to not save the children.

    All the best,
    Joel
     
    make-tafi likes this.
  18. berry4u

    berry4u

    Joined:
    Dec 27, 2017
    Posts:
    18
    Thanks Joel
    I'll test it immediately!

    Regards
    Berardo
     
  19. berry4u

    berry4u

    Joined:
    Dec 27, 2017
    Posts:
    18
    Thanks Joel
    It works so good!!
    Actually it make more sense to not save the children in a majority of cases.

    All the best
    Berardo
     
  20. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Glad to hear it! Let me know if you encounter anything else.

    All the best,
    Joel
     
  21. wood333

    wood333

    Joined:
    May 9, 2015
    Posts:
    607
    I'm seconding the motion for support for these two fine assets. Invector's controller is acknowledged as one of the top three controllers on the asset store. Invector is an excellent developer.

    Quest Machine is a newer offering, but it's by Pixel Crushers, another excellent well established asset store developer.

    I guess my point is that these two assets are high quality and their developers are well established. If you take the time to support them with Easy Save, your time will not be wasted because these assets are reliably supported and not going away. Plus, I believe their developers would be willing to assist.
     
  22. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Hi there,

    Please could you vote on the two feature requests HERE and HERE. This is the only way for us to keep track of what features people want, as there's no way for us to do from the Unity forums.

    Also note that Easy Save is designed to support most classes, so it's likely that it's already supported. You can find information on what's supported in the Supported Types guide.

    All the best,
    Joel
     
    Last edited: Sep 18, 2018
  23. wood333

    wood333

    Joined:
    May 9, 2015
    Posts:
    607
    Both links go to explicit support for Invector, neither go to Quest Machine. Also, both say Bolt Support.
    bolt s.JPG

    (I did create a log in and voted for Invector.)

    F.Y.I. Aside from the Unity standard asset controllers, there are three asset controllers of note, well supported and in common use. They are: Invector's Third Person Template, Opsives Third Person Controller, and OOtii's Third Person Motion Controller. It is worth being aware of them, even if you don't officially support them.
     
  24. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    My apologies, I've fixed the links.

    All the best,
    Joel
     
    wood333 likes this.
  25. Michal_Stangel

    Michal_Stangel

    Joined:
    Apr 17, 2017
    Posts:
    27
    Hello,

    I am using System.Random to create different seeds for getting random numbers. For example:

    Code (CSharp):
    1. public static Random lootGeneratorSeed;
    2. lootGeneratorSeed = new Random();
    But not sure how should I save and load them. Would really appreciate some advice.
     
  26. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Hi there,

    UnityEngine.Random is not serialisable as it does not expose any members at runtime. However, System.Random can be serialised.

    To make it serialisable, go to Window > Easy Save 3 > Types and type Random into the search box. Two items will show up in the list, one for System.Random and one for UnityEngine.Random.

    Select the System.Random one (it's the one which has three fields), and press the 'Select All' button underneath 'Fields'. This will add support for the System.Random class.

    Now you will be able to save and load a System.Random using the following code:

    Code (CSharp):
    1. System.Random r = new System.Random ();
    2. ES3.Save<System.Random>("key", r);
    3. r = ES3.Load<System.Random>("key");
    All the best,
    Joel
     
  27. Michal_Stangel

    Michal_Stangel

    Joined:
    Apr 17, 2017
    Posts:
    27
    Thanks a lot, Joel! I somehow did not comprehend this great functionality :)
     
  28. Michal_Stangel

    Michal_Stangel

    Joined:
    Apr 17, 2017
    Posts:
    27
    Hi Joel,

    Do you plan for some future release to add possibility to shorten saving strings?

    For example, this is how integer value is stored:
    "myKey":{"__type":"System.Int32,mscorlib","value":1}

    Unfortunately, save file in my game is currently huge (100+MB). Mainly because of 5000 saved characters, where class for each of them contains hundreds of variables. I only save variables with non-default values and using very short codes as saving keys, but save file is still way too big.

    If there would be an option in settings to use reduced saving strings for most used variables, it would be great. I mean instead of
    "System.Int32,mscorlib" some short code. And for "__type" and
    "value" possibly too. It would significantly reduce file size and also improve performance I guess.
     
  29. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Hi there,

    The value of the _type parameter is the particular length it is because .NET requires the type name and assembly to be able to resolve the type at runtime. One optimisation that can be made is to remove the library name for primitive types, as it can assume that these reside in mscorlib. If you PM me your invoice number I'll send over an update which makes this change.

    We're also currently working on a BSON formatter for Easy Save which will reduce file sizes significantly, though we currently have no definite release date for this as it's a rather large piece of functionality.

    All the best,
    Joel
     
    hopeful likes this.
  30. Michal_Stangel

    Michal_Stangel

    Joined:
    Apr 17, 2017
    Posts:
    27
    I will wait for BSON then. I'm far away from release anyway.
    Thanks for info :)
     
  31. amybuc95

    amybuc95

    Joined:
    Nov 18, 2015
    Posts:
    5
    Hey there! Thanks a bunch for making this plugin, it's a fantastic solution, and seems to be exactly what I've been after for my own project - your efforts are much, much appreciated!

    That said, I've been having a few issues with a save system I'm trying to implement: So, as simply as I can put it, in my game the player collects quests that appear in the form of a UI image onscreen. Each Image has a common script attached, containing the stats and info of the quest. So, what I'm aiming to do is, upon the player quitting, going through each Image, collecting the script attached to it, adding it to a list, then saving that list to be loaded again, and the images re-instantiated, etc (I know, probably not the best way to go about this, but this has been my first major project in unity, and I've learnt a ton doing it - I'm constantly cleaning up old clumsy code I wrote early on in the project)

    I've followed the steps to have a custom class as saveable, through the manage types menu, then I've managed to get the list saving. The problems arise when I'm loading - I load the list on start, and instantiate a new quest image prefab for each item in the list, then going through the process of transferring the values from the loaded list item, to the blank version of the script on the newly instantiated prefab - the problem I'm having is coming from the fact that while the list seems to be loading, the values within the loaded classes in that script aren't being saved and loaded - it's just a blank version of the script, with no values.

    Is there an extra step I should be taking to ensure that the values of my custom classes are loading, or maybe an extra step I should be taking in order to have a list of custom classes works as expected. It's probably pretty obvious I'm not a massively experienced programmer, so any help or insight would be hugely appreciated!! Thanks!
     
  32. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Hi there,

    Would you be able to PM me a very basic project and instructions to replicate this? It's not possible to tell what is happening from what you've said.

    All the best,
    Joel
     
  33. GBCFraser

    GBCFraser

    Joined:
    Apr 11, 2013
    Posts:
    94
    I am using ES3.
    I keep getting an error/exception thrown by
    I do not know what is causing it. But my game seems unable to save a list of spells(scriptable objects) in ONLY certain levels.
    It results in the following compiler error:
    Code (csharp):
    1. public abstract class ES3ScriptableObjectType : ES3ObjectType
    Code (csharp):
    1.  else
    2.     {
    3.      reader.overridePropertiesName = propertyName;
    4.      if(instance == null)
    5.      {
    6.       instance = ScriptableObject.CreateInstance(type);
    7.       refMgr.Add(instance, id);
    8.      }
    9.      break;
    10.     }
    This is the correct save file unencrypted, it saves a bunch of legible data.

    Code (csharp):
    1. {"playerTimePlayed":{"__type":"System.Single,mscorlib","value":7.919993},"playerCurrentMana":{"__type":"System.Int32,mscorlib","value":150},"playerCurrentHealth":{"__type":"System.Int32,mscorlib","value":150},"playerArmor":{"__type":"System.Int32,mscorlib","value":0},"playerSpellBook":{"__type":"SpellBook,Assembly-CSharp","value":{"spellBook":[{"_ES3Ref":8887641793109920394,"type":0,"name":"Fire Bolt","magicObj":{"_ES3Ref":4540122856154679222,"transformID":5651613174595706393},"icon":{"_ES3Ref":7936355409992290562},"ManaCost":5,"attackObjectSpeed":20}]}},"playerDamage":{"__type":"System.Int32,mscorlib","value":5},"playerPosition":{"__type":"UnityEngine.Vector3,UnityEngine.CoreModule","value":{"x":-30.80984,"y":170.872,"z":0}}}
    This is the "Failed" save file unencrypted, it saves a bunch of gibberish.
    Code (csharp):
    1.  
    2. {"playerTimePlayed":{"__type":"System.Single,mscorlib","value":3.479997},"playerCurrentMana":{"__type":"System.Int32,mscorlib","value":150},"playerCurrentHealth":{"__type":"System.Int32,mscorlib","value":150},"playerArmor":{"__type":"System.Int32,mscorlib","value":0},"playerSpellBook":{"__type":"SpellBook,Assembly-CSharp","value":{"spellBook":[{"type":0,"name":"Fire Bolt","magicObj":{"layer":12,"tag":"Untagged","name":"fireSpell","hideFlags":0,"components":[{"__type":"UnityEngine.Transform,UnityEngine.CoreModule","parent":null,"localPosition":{"x":-42.5,"y":-147,"z":0},"localRotation":{"x":0,"y":0,"z":0,"w":1},"localScale":{"x":1,"y":1,"z":1}},{"__type":"UnityEngine.SpriteRenderer,UnityEngine.CoreModule","sprite":{"texture":{"width":128,"height":32,"format":25,"mipmapCount":1,"filterMode":0,"anisoLevel":1,"wrapMode":1,"mipMapBias":0,"rawTextureData":"YADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYID\/ZJLJ+PoCAOD\/V1VVVWCA\/2SSyfj6AgAABlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVggP9kksn4+gIA+P9XVVVVYID\/ZJLJ+PoCAAYeVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYID\/ZJLJ+PoCAADgV1VVVWCA\/2SSyfj6AgD4\/1dVVVVggP9kksn4+gIAHn5WVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVggP9kksn4+gIAAOBXVVVVYID\/ZJLJ+PoCAOD\/V1VVVWCA\/2SSyfj6AgAGHlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYID\/ZJLJ+PoCAADgV1VVVZD3F20Q8OP5\/\/8BAIDASZIofOv7+oQYJ2YwNYz7Bx4ekP7uwswP4IEBAP6P\/cAP\/GAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVggP9kksn4+gIAgOFXVVVVgMq9\/RMCuTGmgf\/\/4X9mAHjU6\/s9kRiHYzC12q+qqqqQ\/u7CzA+AAQAA\/o\/9wA\/8YADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWCA\/2SSyfj6AoDhAVZVVVUof+v7+oQYJ2YwNYyD2f\/ASOzr+32cGIfXMLXa+\/+evpD+7sLMD4ABAAD+j\/3AD\/xgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYID\/ZJLJ+PoCAOCBV1VVVZD3k10S8Pv\/\/\/8BCJwkCZ4ofOv7+oQYJ2YwNYz7HwYGkP7uwswPgIEBAP6P\/cAP\/GAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVggP9kksn4+oIBAABWVVVVgNG9vxPCoTHNfPD\/2sAP\/5D\/bpLKDwAAAAbeMGz\/9v+Aye\/3ckhIM8b8D777f34eYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVWA1L2\/E8KhMc188P\/Cww\/\/gJX+9yZOyGDG\/P\/B76lwD4DJ7\/dySEgzxvwPvnt+HgZgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVSDf+oSYwQD8gwEAAPzwAACAlf73Jk7IYMb8\/8H\/qVAPgMnv93JISDPG\/A++ex4eAGAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVIN\/6hJjB\/AOAAQAAAA\/\/\/4B7v9hDUrgxhn3w\/4IHIAaAye\/3ckhIM8b8D757fh4GYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVQ=="},"textureRect":{"x":12.01291,"y":8.026751,"width":17.93577,"height":13.89713},"pivot":{"x":16,"y":16},"pixelsPerUnit":1,"border":{"x":0,"y":0,"z":0,"w":0}},"color":{"r":1,"g":1,"b":1,"a":1},"flipX":false,"flipY":false,"enabled":false,"shadowCastingMode":0,"receiveShadows":false,"sharedMaterials":[{"shader":{"name":"Sprites\/Diffuse","maximumLOD":-1},"renderQueue":3000,"shaderKeywords":["ETC1_EXTERNAL_ALPHA"],"globalIlluminationFlags":4,"_Color":{"r":1,"g":1,"b":1,"a":1},"_MainTex":null,"PixelSnap":0,"_RendererColor":{"r":1,"g":1,"b":1,"a":1},"_Flip":{"x":1,"y":1,"z":1,"w":1},"_AlphaTex":null,"_EnableExternalAlpha":0}],"lightmapIndex":-1,"realtimeLightmapIndex":-1,"lightmapScaleOffset":{"x":1,"y":1,"z":0,"w":0},"motionVectorGenerationMode":1,"realtimeLightmapScaleOffset":{"x":1,"y":1,"z":0,"w":0},"lightProbeUsage":1,"lightProbeProxyVolumeOverride":null,"probeAnchor":null,"reflectionProbeUsage":1,"sortingLayerName":"Player","sortingLayerID":823544879,"sortingOrder":2},{"__type":"UnityEngine.BoxCollider2D,UnityEngine.Physics2DModule","size":{"x":10.30816,"y":13.0336},"isTrigger":false,"usedByEffector":false,"offset":{"x":0.6732273,"y":5.273651},"sharedMaterial":null,"enabled":true}]},"icon":{"texture":{"width":128,"height":32,"format":25,"mipmapCount":1,"filterMode":0,"anisoLevel":1,"wrapMode":1,"mipMapBias":0,"rawTextureData":"YADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYID\/ZJLJ+PoCAOD\/V1VVVWCA\/2SSyfj6AgAABlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVggP9kksn4+gIA+P9XVVVVYID\/ZJLJ+PoCAAYeVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYID\/ZJLJ+PoCAADgV1VVVWCA\/2SSyfj6AgD4\/1dVVVVggP9kksn4+gIAHn5WVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVggP9kksn4+gIAAOBXVVVVYID\/ZJLJ+PoCAOD\/V1VVVWCA\/2SSyfj6AgAGHlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYID\/ZJLJ+PoCAADgV1VVVZD3F20Q8OP5\/\/8BAIDASZIofOv7+oQYJ2YwNYz7Bx4ekP7uwswP4IEBAP6P\/cAP\/GAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVggP9kksn4+gIAgOFXVVVVgMq9\/RMCuTGmgf\/\/4X9mAHjU6\/s9kRiHYzC12q+qqqqQ\/u7CzA+AAQAA\/o\/9wA\/8YADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWCA\/2SSyfj6AoDhAVZVVVUof+v7+oQYJ2YwNYyD2f\/ASOzr+32cGIfXMLXa+\/+evpD+7sLMD4ABAAD+j\/3AD\/xgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYID\/ZJLJ+PoCAOCBV1VVVZD3k10S8Pv\/\/\/8BCJwkCZ4ofOv7+oQYJ2YwNYz7HwYGkP7uwswPgIEBAP6P\/cAP\/GAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVggP9kksn4+oIBAABWVVVVgNG9vxPCoTHNfPD\/2sAP\/5D\/bpLKDwAAAAbeMGz\/9v+Aye\/3ckhIM8b8D777f34eYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVWA1L2\/E8KhMc188P\/Cww\/\/gJX+9yZOyGDG\/P\/B76lwD4DJ7\/dySEgzxvwPvnt+HgZgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVSDf+oSYwQD8gwEAAPzwAACAlf73Jk7IYMb8\/8H\/qVAPgMnv93JISDPG\/A++ex4eAGAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVIN\/6hJjB\/AOAAQAAAA\/\/\/4B7v9hDUrgxhn3w\/4IHIAaAye\/3ckhIM8b8D757fh4GYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVWAAwGSSyfj6rqqqqlZVVVVgAMBkksn4+q6qqqpWVVVVYADAZJLJ+PquqqqqVlVVVQ=="},"textureRect":{"x":12.01291,"y":8.026751,"width":17.93577,"height":13.89713},"pivot":{"x":16,"y":16},"pixelsPerUnit":1,"border":{"x":0,"y":0,"z":0,"w":0}},"ManaCost":5,"attackObjectSpeed":20}]}},"playerDamage":{"__type":"System.Int32,mscorlib","value":5},"playerPosition":{"__type":"UnityEngine.Vector3,UnityEngine.CoreModule","value":{"x":-1889.505,"y":1262.321,"z":0}}}
    The last file saves stuff I did not ask for.

    I'm trying to save the players Spellbook, which is a list of spells, spells are scriptable objects in the game.

    Edit:
    Ok I see what is going on, for some reason a sprite renderer is being saved or something, I'm doing manual saving for my objects, I did not ask for it to grab that and toss it into the file.

    Its a reference to a sprite object, its not supposed to save no renderer.

    Edit:
    Its saving the sprite as a file, not as a reference I only need the sprite of the spell to save a reference, its the icon of the spell. Still don't know why it was saving, tried to reorganize the script a bit; sprite seems to be problem.

    Edit: It seems that removing easy save manager object is a bad idea. Thought it wasn't needed for manual saving. ES3 seems to be working.
     
    Last edited: Dec 3, 2018
  34. Hazneliel

    Hazneliel

    Joined:
    Nov 14, 2013
    Posts:
    165
    Hello

    I have been using Easy Save and it has been great, however with the introduction of Easy Save 3 I started to see the object "Easy Save 3 Manager" added to my scene everytime. What is bad about it is that everytime I open the scene it makes changes to the Scene Object, and I constantly see my Scene object has changes when using version control.

    I read in the description that this component is required on scenes that use Easy Save. But I remember that in previous versions this was not the case.

    Is there a way to work without it?

    Thanks
     
  35. Hazneliel

    Hazneliel

    Joined:
    Nov 14, 2013
    Posts:
    165
    Also I have another problem that started to happen recently. When I save a value on runtine, I verify that the value is persisted, but when I exit PlayMode and go back to editor, the value is lost, if I enter Play mode again the values where not persisted.

    Why is this happening?

    Thanks
     
  36. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Hi there,

    If you are not using Easy Save 3 you can delete the Assets/Plugins/Easy Save 3/ folder and the manager will not be added to your scene. However, it is required for Easy Save 3 if you are saving reference types as it contains the reference manager. If you are not saving references, you can go to Window > Easy Save 3 > Settings and uncheck Auto Add Manager to Scene to stop it from being automatically added to your scenes.

    With regards to your issue, I'm afraid it's not possible to tell what is happening from what you've said, and I've had no other reports of any issues like this. Please could you create a new, basic project and instructions to replicate this issue and PM it to me?

    All the best,
    Joel
     
    Hazneliel and SweatyChair like this.
  37. GBCFraser

    GBCFraser

    Joined:
    Apr 11, 2013
    Posts:
    94
    Hi Joel.
    Thank you for the swift reply. I found the manager was needed for every scene otherwise references don't save properly for my list of scriptable objects (Spellbook holds a list of Spells, spells are scriptable objects which can be added to objects from the resource manager. Each spell holds a reference to its HUD icon and its projectile prefab reference.)

    I was trying to save a scriptable object manually, and the save manger tries to save the whole object instead of the reference, auto adding the easysave 3 manager, resolved this. Once adding the save manager, it resolved many of the issues.

    I am still having a few challenges:
    1. Black text caused by easysave 3 manager?
    I do notice that the save manager, makes hud text in the canvas go completely black, sometimes when making changes. Saving the scene multiple times when ever an object is added resolves this, but it is annoying to see the hud not working. I added the save manager to another side-project to test this issue and the HUD/UI text also goes black (exclusively for text UI objects). Attached screenshot.


    2. Still have trouble saving scriptable objects, this time between scenes/levels, I'm saving the object individually with its own key. The spell/spellbook is loaded in a different scene, and the spells come up as a blank scriptable object. This only occurs when the player, (which holds a spellbook), is loaded from the save manager in a scene he wasn't instantiated from. (Are references to the same objects/resources different between scenes or does the save manager hold a reference consistently?)
    -I resolved most of this by just saving the player with ES3.loadinto<GameObject>(,,,) whatever it does it seems to resolve scriptable object. Its magic behind the hood I'm not 100% comfortable with but its an easy solution.

    3. How well does asynchronously loading scenes work with the easysave 3 manager?

    Does each scene's save manger reference the same type of object differently? Our team talked about loading scenes asynchronously as a possibility for later, how does EasySave3 handle multiple easysave 3 managers when loading levels asynchronously?

    4. Many of my custom objects/scripts are not loaded to the EasySave3 menu area, only a handful. I must be doing something wrong. The "types" search area does not seem to be able to detect my scripts. Is there something I must do to make EasySave3 detect my scripts? I've been looking through the documentation and can't find what I did wrong. (I can't find my type in the type detector/search menu, so I can't control serialization.)
     

    Attached Files:

  38. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Hi there,

    The black text issue was resolved in Easy Save 3.03, so you may want to try updating before doing anything else.

    With regards to the ScriptableObject, it's not possible for me to tell why this is from what you've said. Would you be able to PM me a basic project to replicate it? If you could also provide the ES3.LoadInto code this would be useful to see the difference between the two.

    Easy Save automatically merges managers when scenes are loaded asynchronously, so it should work fine with asynchronous scenes.

    With regards to the types not appearing in the Types pane, be aware that the Types pane is case sensitive so you will need to type the name exactly. Also note that if your types aren't publicly accessible, they won't appear in the list. If this is not the problem, could you again PM a basic project and instructions to replicate it?

    All the best,
    Joel
     
  39. SpyrosUn

    SpyrosUn

    Joined:
    Nov 20, 2016
    Posts:
    82
    Hi there ! I am having some trouble saving a GameObject along with its children. The children are mostly prefabs and I have added the easy save prefab script to them, as well as have created the custom types, all of them successfully.

    Now, even when i create a very simple sample structure that consists of 2 gameobjects only (without the prefabs or my custom types), easy save will only save the parent gameobject and not the child one.

    My save looks like this :

    string filepath = ES3.Directory.PersistentDataPath + "/" + saveFilename;
    ES3.Save<GameObject>(level, levelObject, filepath); // level is a string like "level1"

    Am II missing something ? is there maybe an option to include the children gameobjects ? The docs say that this happens by default, but I just can't get it to work :/

    Thanks !
     
  40. SpyrosUn

    SpyrosUn

    Joined:
    Nov 20, 2016
    Posts:
    82
    Hmm, looking at the latest release notes :

    "- Saving GameObject using ES3.Save no longer saves children."

    You may want to update the docs on that btw :) It still claims that children are saved.
    Is there an option to use to still save children now ? :D
     
  41. SpyrosUn

    SpyrosUn

    Joined:
    Nov 20, 2016
    Posts:
    82
    oh, ok I got it after digging a bit. I needed to add the es3 autosave script on the parent gameobject. Seems fine now :)
     
  42. SpyrosUn

    SpyrosUn

    Joined:
    Nov 20, 2016
    Posts:
    82
    I a noticing this error however now :

    FormatException: Expected '[' or "null", found ','.

    ES3Internal.ES3JSONReader.ReadNullOrCharIgnoreWhitespace (Char expectedChar) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3JSONReader.cs:390)

    I have unchecked the autosave option from the Easy Save 3 Manager gameobject cause i don't really need it, but keep getting the error above. Doesn't stop execution, but I am wondering why this happens. Am i maybe not going the correct way about setting the gameobject with the es3 autosave script ? Maybe the intended way is different ? Cause this is an autosave script, maybe it's not meant to be used with the normal ES3.Save().

    By the way, this does not appear to be one of my own types, but rather a 2d collider? Here is the first lines of the exception :

    FormatException: Expected '[' or "null", found ','.

    ES3Internal.ES3JSONReader.ReadNullOrCharIgnoreWhitespace (Char expectedChar) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3JSONReader.cs:390)

    ES3Internal.ES3JSONReader.StartReadCollection () (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3JSONReader.cs:157)

    ES3Types.ES3ArrayType.Read (.ES3Reader reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ArrayType.cs:49)

    ES3Reader.Read[Vector2[]] (ES3Types.ES3Type type) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:240)

    ES3Types.ES3Type_PolygonCollider2D.ReadComponent[Object] (.ES3Reader reader, System.Object obj) (at Assets/Plugins/Easy Save 3/Scripts/Types/Unity Types/Component Types/ES3Type_PolygonCollider2D.cs:49)
     
    Last edited: Dec 31, 2018
  43. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Hi there,

    You can add an ES3AutoSave component to the parent GameObject, and select the ES3AutoSave's Save Children field to ensure that children are saved when using ES3.Save<GameObject>. However, you should go to Window > Easy Save 3 > Auto Save and ensure that the Save Event and Load Event are set to None. Otherwise Auto Save will still try to automatically save your object. Unchecking the ES3 Auto Save manager does not stop the events from being called.

    With regards to the error you're getting, please could you first try deleting your save data. You can find this by going to Window > Easy Save 3 > Tools > Open Persistent Data Path.

    If this does not fix your issue, please could you PM me a basic project which replicates this, instructions to replicate it, and your invoice number incase I need to send you an update.

    All the best,
    Joel
     
  44. Redrag

    Redrag

    Joined:
    Apr 27, 2014
    Posts:
    127
    Using EasySave 2, loading sequentially reader.Read(transform), is there a way to discard the result rather than loading it into the transform? I just want to move on to the next item.
     
  45. jason07

    jason07

    Joined:
    May 10, 2011
    Posts:
    33
    Hi,

    I'm using Playmaker with Easy Save and I want to save multiple FSM variables as the player progresses in the game. My game gives the player the option to use multiple save slots, and I'm wondering how the FSM variables can be saved as the player progresses and be loaded only with their own respective save slot. I know I can save variables with the Easy Save PM actions, but how could they get saved for the appropriate save slot without knowing beforehand which save slot the player will later choose? Thanks!
     
  46. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Hi there,

    This is not possible in Easy Save 2 as the format means that it's unaware of the length of the data until it has been read. Instead the best alternative is to create a blank GameObject in your scene which you can use to load the data into.

    All the best,
    Joel
     
  47. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Hi there,

    You could save the data to a temporary file, and then when the user chooses a particular save slot, use the Rename File action to rename that file to the appropriate file for the save slot.

    All the best,
    Joel
     
    jason07 likes this.
  48. Redrag

    Redrag

    Joined:
    Apr 27, 2014
    Posts:
    127
    Yes I was hoping there might be a more elegant way. Maybe something for the wishlist?
     
  49. SpyrosUn

    SpyrosUn

    Joined:
    Nov 20, 2016
    Posts:
    82
    Hi there, when loading a GameObject with LoadInto(), I see that a new object is created, namely "Easy Save 3 Loaded GameObject". My saved object has quite a few prefabs as children.

    My question is, is it possible to load a Gameobject with many prefabs and components when i only have a single GameObject object on which the load happens ? I keep getting this new "Easy Save 3 Loaded GameObject" when i try that.

    Haven't noticed this before because I was doing it on my EditorScene, but once this gets to the main scene, it needs to be loaded on a specific hierarchy location.

    The Easy Save information message claims that I should use LoadInto, but I am already using it. My call is liike this :

    ES3.LoadInto<GameObject>(key, filepath, levelObject) // levelObject is a GameObject

    Looks like this may have something to do with the GameObject instance id ?? Although, it doesn't look like this should be happening on a LoadInto call, because i am specifying the GameObject to load to. Maybe a bug ?
     
    Last edited: Jan 3, 2019
  50. joeltebbett

    joeltebbett

    Joined:
    Oct 18, 2009
    Posts:
    486
    Due to the format in Easy Save 2, this would not be possible without rewriting the format.

    All the best,
    Joel