[Unity3D] Alternativa a PlayersPrefs?

EtherSnake

Hola a todos,

Tras empezar a leer el subforo hace un tiempo me anime y empece a trastear con Unity, poco a poco he ido aprendiendo y tengo un juego para smartphones "casi" terminado a falta de terminar los menús y pulir algún aspecto del gameplay.

De momento tengo guardado los records y los personages desbloqueados utilizando los PlayersPrefs pero es una solución que no me termina de gustar, por lo que he leído es bastante fácil modificarlos y en el caso de publicar el juego podría joder bastante la experiencia del jugador si en los rankings hay gente con miles de puntos.

Se que no debería de preocuparme por esto teniendo en cuenta que en caso de publicarlo posiblemente se lo bajaran cuatro gatos, pero me gustaría saber si existe alguna alternativa mas fiable para guardar este tipo de información.

Un saludo y gracias.

FernandoA

Mira este video que explica como guardar datos en archivos.
Persistence - Saving and Loading Data
De este modo estarán mas seguros que en Playerprefs (que realmente solo debería usarse para configuraciones del usuario como idioma, sonido, resolución...), pero aun así no es infalible. Lo ideal sería ofuscar los datos o incluso encriptarlos para hacer más dificil su modificación externa.

A ésto tambien le puedes añadir verificaciones de integridad para proteger aun más el archivo. De todos modos ten en cuenta que si alguien sabe del tema, va a poder trampear si o si, pero no está de más ponerlo lo más dificil posible para que al menos la gran mayoría no sea capaz de hacerlo.

1 1 respuesta
D4rk3viL

Porque nadie habla de BD's en unity para guardar registros(maxima puntuaciones y demas)? (es una duda que tengo desde hace mucho tiempo. Soy noob xD), yo es lo que uso, concretamente sqlite que es lo que viene integrado en unity. Pero ciertamente veo que todo el mundo usa de todo menos esto y no se por que.

2 respuestas
B

#3 Teniendo soluciones menos complicadas y más light, la gente usará otras cosas. Yo SQLite sólo lo he usado en juegos grandes. Para guardar máximas puntuaciones y tal no veo el problema en usar PlayerPrefs, o una BD externa y usar WWW.

1 respuesta
FernandoA

#3 Se pueden usar perfectamente pero en la mayoría de casos es innecesario. Las bases de datos se usan principalmente para almacenar grandes cantidades de información relacionada entre si, en muchos casos con sistemas para que se autogestione y para reducir la programación externa al mínimo. Para crear una base de datos solo con tablas independientes en las que almacenas datos sin más, no necesitas bbdd.

#4 Los PlayerPrefs son, como su nombre indica, para guardar las preferencias del jugador. Entendiendo por preferencias las opciones, idioma, configuraciones gráficas, etc. Nunca para guardar datos del juego o de la partida en si. El motivo es que es completamente inseguro, en móviles se pueden editar fácilmente con programas externos y en PC directamente editando el registro, por lo que si guardas las máximas puntuaciones o cualquier dato del juego ahí cualquiera puede "romper" el juego fácilmente. ¿Qué sentido tiene guardar máximas puntuaciones si cualquier jugador puede poner la puntuación que quiera escribiéndola en un campo de texto?

Por otra parte usar el WWW para guardar los datos en un servidor propio y controlado (ya sea en bbdd o en archivos) es la manera más segura de evitar manipulaciones, pero aun así hay que tener mucho cuidado y saber mucho del tema para que no te la metan doblada. Toda la programación de red es muy complicada de hacer correctamente porque hay que tener muchísimos conocimientos de seguridad informática para hacerla de forma segura. Y aun haciéndola muy bien es muy probable que haya vulnerabilidades que te puedan fastidiar. Si ocurre en grandes empresas que tienen verdaderos cracks especialistas en el tema puede ocurrirle a cualquiera.

1
B

Esto te puede interesar bastante

http://www.alanzucconi.com/2015/09/02/a-practical-tutorial-to-hack-and-protect-unity-games/

1 1 respuesta
EtherSnake

#2 Muchas gracias por el link, por algún motivo lo pase por alto en la web de Unity, creo que guardando los datos en un archivo como explica y ofuscando el valor para que no resulte algo evidente a simple vista debería de bastar.

Esta claro que si alguien saber del tema y le pone ganas va a conseguir modificar los valores, pero lo que no me gustaría es que cualquiera con un simple programa pueda editar la puntuación y los rankings estén llenos de gente con puntuación imposible.

#6 Muchas gracias, voy a echarle un vistazo detenidamente.

Usuarios habituales