Search Unity

save custom class

Discussion in 'Scripting' started by fred_gds, Mar 24, 2013.

  1. fred_gds

    fred_gds

    Joined:
    Sep 20, 2012
    Posts:
    184
    Hi,

    I already searched google but I couldn't find an answer.

    Is it possible to save all variables of a custom class in unity script (on iOS)?

    So if I have
    Code (csharp):
    1. var myObject : CustomClass;
    and
    Code (csharp):
    1. class CustomClass {var variable1 : int;   var variable2 : boolean;   var variable3 : string}
    I want to save it like this
    Code (csharp):
    1. PlayerPrefs.Set(myObject);
    but as far as I know PlayerPrefs only supports ints and I'm not sure if PlayerPrefsX supports Classes or Strings.

    I hope somebody can help me out.

    Best regards,

    Fred
     
  2. stridervan

    stridervan

    Joined:
    Nov 11, 2011
    Posts:
    141
    PlayerPrefs only supports built-in system types. If you need to save your class you need to write your own. Or you can try XML serialization into an XML file. It is really simple

    Code (csharp):
    1.  
    2. var serializer = new XmlSerializer(typeof(MyClass));
    3. var writer = new StreamWriter("data.xml");
    4. serializer.Serialize(writer, myClassInstance);
    5. writer.Close();
    6.  
     
  3. fred_gds

    fred_gds

    Joined:
    Sep 20, 2012
    Posts:
    184
    Thanks. That already looks pretty easy. But your example only shows how to save. How would I load those score?

    And are the XmlSerializer saved even when the app is closed?
     
  4. stridervan

    stridervan

    Joined:
    Nov 11, 2011
    Posts:
    141
    Yes, it actually saves to a file not in memory so they will persist even after closing the game. To load the file just do the opposite

    Code (csharp):
    1.  
    2. var serializer = new XmlSerializer(typeof(MyClass));
    3. var reader = new StreamReader("data.xml");
    4. var data = (MyClass) serializer.Deserialize(reader); // only difference
    5. reader.Close();
    6.  
     
  5. fred_gds

    fred_gds

    Joined:
    Sep 20, 2012
    Posts:
    184
    Ahh! Thanks!!!.

    So I wrote It like that now

    Code (csharp):
    1. function Save()
    2. {
    3.     var serializer : XmlSerializer = new XmlSerializer(typeof(PlayerScores));
    4.     var writer : System.IO.StreamWriter = new System.IO.StreamWriter("data.xml");
    5.     serializer.Serialize(writer, player);
    6.     writer.Close();
    7. }
    8.  
    9. function Load()
    10. {
    11.     var serializer : XmlSerializer = new XmlSerializer(typeof(PlayerScores));
    12.     var reader : System.IO.StreamReader = new System.IO.StreamReader("data.xml");
    13.     player = serializer.Deserialize(reader); // only difference
    14.     reader.Close();
    15. }
     
    Last edited: Mar 24, 2013