Entonces playerpref.save() solo guardaria a un archivo en binario todo lo que ya exista con un haskey anterior?
[quote author=FiroH" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="26335" data-ipsquote-contentcommentid="113859">Entonces playerpref.save() solo guardaria a un archivo en binario todo lo que ya exista con un haskey anterior?[/quote]Por favor, antes de preguntar asegúrate de que tu pregunta es de fácil comprensión para los que la leerán. Recuerda que eres tú el que pide ayuda, según esté formulada tu pregunta, así será la respuesta. Vamos, que me llames subnormal o lo que quieras, pero sigo sin entender del todo la cuestión.Para empezar, HasKey(
Has, del verbo "tener" y
Key, que se traduce como "clave"), es una función que devuelve un valor booleano(
bool) para comprobar si entre los datos, existe la clave con el nombre que le pasas en su parámetro. Devolverá
true si existe, o
false si no existe. Por tanto, creo que tu pregunta no tiene sentido.Intentaré explicártelo más detalladamente y ya tú sacas tus conclusiones: Supongamos que tenemos estas instrucciones
dentro de una función del código de nuestro juego:
PlayerPrefs.SetInt("puntuacion_maxima", 85324);
PlayerPrefs.SetInt("nivel", 7);
PlayerPrefs.SetInt("vidas", 3);Pues bien, esto no guardaría nada en ningún archivo. Lo único que haría es crear variables con valores indexados con claves en la memoria RAM, y no en un archivo. Esta sería la representación gráfica de los datos creados con el código anterior:(http://i.imgur.com/09FEGbN.png)Cuando el programa(juego), llegue a la instrucción
PlayerPrefs.Save(); en cualquier parte de nuestro código, todos los datos de esa tabla serán almacenados en un archivo en el disco duro/ROM.Después de esto, en cualquier momento se podría actualizar individualmente cualquier valor sin que se pierdan los demás datos. Por ejemplo, "puntuacion_maxima":
PlayerPrefs.SetInt("puntuacion_maxima", 93200);Como la clave "puntuacion_maxima" ya existía, su anterior valor asignado 85324 se sobreescribirá por 93200. Si no existiera, la crearía. Pero recuerda que esto actualizaría los datos solo en la memoria RAM. Hasta que no llamemos otra vez a
PlayerPrefs.Save(), no se almacenaría en el archivo. Entonces, lo que haría
PlayerPrefs.Save(), sería simplemente pasar todos los datos de la memoria RAM al archivo. Espero que lo hayas entendido porque no sabría cómo explicártelo mejor.
Me vale, por que si funciona asi, puedo crear una clase e indexarla a un botton tipo guardar para con una funcion actualizar todos los haskeys y pasar finalmente la funcion playerprefs.save() para realizar puntos de guardado.
Por otra parte en mi ultimo juego, duckstars para android nunca use la función playerprefs.save() y saliendo y entrando a la aplicación día tras día los datos se habían actualizado solo con la memoria RAM?
La pregunta era que si usar la funcion playerprefs.save() era peor que crear y actualizar los playerprefs, por que en la documentación daba a entender que guardaba cada uno de los valores existentes en el juego(variables) y debido a que la plataforma de soporte sería android, podía llegar a ralentizarse mucho.
Segun la documentacion de Unity:
public static function
Save(): void;Description
Writes all modified preferences to disk.
By default Unity writes preferences to disk on Application Quit. In case when the game crashes or otherwise prematuraly exits, you might want to write the PlayerPrefs at sensible 'checkpoints' in your game. This function will write to disk potentially causing a small hiccup, therefore it is not recommended to call during actual gameplay.
Note: On Windows Store Apps and Windows Phone 8.1 preferences are saved during application suspend, because there's no application quit event.
"y olle, tranquilo viejo XD"
¿Tranquilo? yo apenas me altero. Si vas a ayudar en algo, responde como puedas. Pero si pides ayuda, asegúrate antes de clickar el botón de enviar, de que las demás personas no van a perder el tiempo leyéndote. Eso era todo lo que te decía y en ningún momento me he alterado lo más mínimo. Al fin y al cabo, tenemos la libertad de ignorar los post que queramos, pero supongo que eso no es lo que quiere el que pide ayuda, no? Has necesitado tres mensajes para explicarte medio adecuadamente, pero al menos lo has conseguido y solo por eso te voy a contestar una vez más xDComo bien dice la documentación, PlayerPrefs.Save almacenará los datos en el disco, aunque por defecto, si hay datos de PlayerPrefs en memoria, Unity los guarda automáticamente al dispararse el evento Application Quit, es decir, cuando el usuario cierra la aplicación. Pero si no usas PlayerPrefs.Save, los datos no se guardarán en el disco si el juego se ha cerrado inesperadamente por cualquier error, corte de electricidad, o lo que sea, ya que esto no disparará el evento Application Quit. Como imaginarás, esto es menos probable en juegos para Android a no ser que se te acabe la batería o tu juego tenga errores que provoquen un crash repentino. Además, menciona que puede congelarse el juego durante el proceso de guardado, pero como te dije antes, esto dependerá de la cantidad de datos a guardar y también de las prestaciones del dispositivo. Así que se recomienda usar "momentos" clave para el guardado con PlayerPrefs.Save() y no durante el gameplay. Fíjate en los juegos de la Playstation antigua, tiene pausas para guardar el juego porque el acceso a la memory card es lento y el juego se quedaría trabado 5 o 6 segundos hasta que almacena los datos Lo que habrá pasado en tu último juego, es que los datos se han almacenado porque Unity los guarda automáticamente si cierras la aplicación manualmente, pero si un usuario de tu juego está jugando tranquilamente y de pronto el juego crashea o se le apaga por no tener batería, los últimos datos actualizados se habrían perdido en el limbo.
@FiroH, quizás lo que necesitas es crear un Streaming Database(base de datos de emision en tiempo real), que guarda distintos tipos de datos en un mismo archivo. Puedes ver:
Byte Streaming DataBase (Facil de utilizar)
[quote author=Final Level" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="26335" data-ipsquote-contentcommentid="114040">¿Tranquilo? yo apenas me altero. Si vas a ayudar en algo, responde como puedas. Pero si pides ayuda, asegúrate antes de clickar el botón de enviar, de que las demás personas no van a perder el tiempo leyéndote. Eso era todo lo que te decía y en ningún momento me he alterado lo más mínimo. Al fin y al cabo, tenemos la libertad de ignorar los post que queramos, pero supongo que eso no es lo que quiere el que pide ayuda, no? Has necesitado tres mensajes para explicarte medio adecuadamente, pero al menos lo has conseguido y solo por eso te voy a contestar una vez más xDComo bien dice la documentación, PlayerPrefs.Save almacenará los datos en el disco, aunque por defecto, si hay datos de PlayerPrefs en memoria, Unity los guarda automáticamente al dispararse el evento Application Quit, es decir, cuando el usuario cierra la aplicación. Pero si no usas PlayerPrefs.Save, los datos no se guardarán en el disco si el juego se ha cerrado inesperadamente por cualquier error, corte de electricidad, o lo que sea, ya que esto no disparará el evento Application Quit. Como imaginarás, esto es menos probable en juegos para Android a no ser que se te acabe la batería o tu juego tenga errores que provoquen un crash repentino. Además, menciona que puede congelarse el juego durante el proceso de guardado, pero como te dije antes, esto dependerá de la cantidad de datos a guardar y también de las prestaciones del dispositivo. Así que se recomienda usar "momentos" clave para el guardado con PlayerPrefs.Save() y no durante el gameplay. Fíjate en los juegos de la Playstation antigua, tiene pausas para guardar el juego porque el acceso a la memory card es lento y el juego se quedaría trabado 5 o 6 segundos hasta que almacena los datos
[quote author=iRobb" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="26335" data-ipsquote-contentcommentid="114074">Lo que comentas del playerprefs.save, "que almacenará etc, y si no lo usas los datos etc" puedes colocar el link de la documentación? Estoy muy interesado.[/quote]Te refieres a la documentación de la clase PlayerPrefs?
Título: PlayerPrefs.Save Peor?
Publicado por: iRobb en Septiembre 27, 2015, 08:32:12 PM
[quote author=Final Level" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="26335" data-ipsquote-contentcommentid="114085"> Te refieres a la documentación de la clase PlayerPrefs?
http://docs.unity3d.com/ScriptReference/PlayerPrefs.html[/quote]Particularmente esto:"
[quote author=iRobb" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="26335" data-ipsquote-contentcommentid="114086">Particularmente esto:"PlayerPrefs.Save almacenará los datos en el disco, aunque por defecto, si hay datos de PlayerPrefs en memoria, Unity los guarda automáticamente al dispararse el evento Application Quit, es decir, cuando el usuario cierra la aplicación. Pero si no usas PlayerPrefs.Save, los datos no se guardarán en el disco si el juego se ha cerrado inesperadamente por cualquier error, corte de electricidad, o lo que sea, ya que esto no disparará el evento Application Quit"[/quote]
Título: PlayerPrefs.Save Peor?
Publicado por: iRobb en Septiembre 27, 2015, 08:52:56 PM
Entendido