Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: rogerdv en Octubre 08, 2015, 08:23:30 PM

Título: Salvar el juego
Publicado por: rogerdv en Octubre 08, 2015, 08:23:30 PM
Estoy iniciando algunas pruebas para entender el proceso de salvar el juego y me he encontrado algunos problemas. Pense que solo necesitaba declarar una clase como serializable para poderla guardar en un archivo, pero parece que hay cosas que no pueden serializarse, como las listas, etc. El caso es que las clases del jugador, los NPC, y otras, tienen listas o diccionarios, y además me percaté que dicha clase no guarda datos como la posición del jugador, porque eso está en el GameObject padre. La primera solucion que se me ocurrió fue crear otra clase que contendría la información a guardar, pero eso significa que por cada cosa que necesite almacenar, tendré que implementar una clase equivalente de almacenamiento.Agradecería cualquier consejo con respecto a este asunto. 
Título: Salvar el juego
Publicado por: iRobb en Octubre 09, 2015, 01:08:46 AM
Yo me creo como tú una clase con todos los parámetros. La diferencia es que yo la serializo "a mano" utilizando la clase BinaryFormatter de System.IOEs compatible con mobile (Android probado) sin problemas. Con ella puedes serializar una clase o lo que quieras de manera individual. No lo he probado con una List pero no debería haber problemas.
Título: Salvar el juego
Publicado por: Oak Human Flesh en Octubre 09, 2015, 03:18:21 AM
http://gamedevelopment.tutsplus.com/tutorials/how-to-save-and-load-your-players-progress-in-unity--cms-20934 (http://gamedevelopment.tutsplus.com/tutorials/how-to-save-and-load-your-players-progress-in-unity--cms-20934)te sirve eso?
Título: Salvar el juego
Publicado por: iRobb en Octubre 09, 2015, 03:50:58 AM
Justo!
Título: Salvar el juego
Publicado por: H@pesend en Octubre 09, 2015, 07:30:10 AM
yo serializo listas como si no costasen a xml...
Título: Salvar el juego
Publicado por: rogerdv en Octubre 09, 2015, 08:43:10 PM
Ya, me estudiare esto. El caso es que el error que me da es este:
SerializationException: Type UnityEngine.MonoBehaviour in assembly UnityEngine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null is not marked as serializable.
System.Runtime.Serialization.FormatterServices.GetSerializableMembers (System.Type type, StreamingContext context) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Runtime.Serialization/FormatterServices.cs:101)
System.Runtime.Serialization.Formatters.Binary.CodeGenerator.GenerateMetadataTypeInternal (System.Type type, StreamingContext context) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/CodeGenerator.cs:78)
System.Runtime.Serialization.Formatters.Binary.CodeGenerator.GenerateMetadataType (System.Type type, StreamingContext context) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/CodeGenerator.cs:64)
System.Runtime.Serialization.Formatters.Binary.ObjectWriter.CreateMemberTypeMetadata (System.Type type) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectWriter.cs:442)
System.Runtime.Serialization.Formatters.Binary.ObjectWriter.GetObjectData (System.Object obj, System.Runtime.Serialization.Formatters.Binary.TypeMetadata& metadata, System.Object& data) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectWriter.cs:430)
System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteObject (System.IO.BinaryWriter writer, Int64 id, System.Object obj) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectWriter.cs:306)
System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteObjectInstance (System.IO.BinaryWriter writer, System.Object obj, Boolean isValueObject) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectWriter.cs:293)
System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteQueuedObjects (System.IO.BinaryWriter writer) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectWriter.cs:271)
System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteObjectGraph (System.IO.BinaryWriter writer, System.Object obj, System.Runtime.Remoting.Messaging.Header[] headers) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectWriter.cs:256)
Pensaba que las listas no eran serializables y si lo son, pero estoy rastreando que dato se me ha quedado sin marcar, o si tengo algun diccionario por ahi, pero no encuentro nada. 
Título: Salvar el juego
Publicado por: iRobb en Octubre 09, 2015, 09:29:47 PM
PublicKeyToken=null is not marked as serializable.
Hay algo por allí no inicializado, no asignado, o a saber.