unity tutorial playerprefs guardar datos android database unity3d

android - tutorial - guardar datos unity



¿La mejor manera de guardar una gran cantidad de datos localmente en Unity3D Android? (3)

NOTA: no utilice "StreamWriter" por ningún motivo.

Simplemente use los comandos triviales File.Write.

¡Este es un malentendido extremadamente común en Unity!

Hay un gran problema en Unity: la gente ve un código de ejemplo totalmente incorrecto en la red y los problemas ridículos se propagan durante años. Nunca, nunca use "StreamWriter" - solo use las funciones triviales File.Write. No podría ser más fácil.

Con respecto a la pregunta anterior: "miles" de entradas no es absolutamente nada. (Cualquier imagen de icono pequeño irrelevante en su aplicación eclipsará totalmente el tamaño de sus datos de nombre / dirección).

(1) solo puede guardar un archivo de texto,

Es increíblemente fácil escribir y leer archivos en Unity.

// IO crib sheet.. // filePath = Application.persistentDataPath+"/"+fileName; // check if file exists System.IO.File.Exists(f) // write to file File.WriteAllText(f,t) // delete the file if needed File.Delete(f) // read from a file File.ReadAllText(f)

Eso es todo al respecto.

string currentText = File.ReadAllText(filePath);

BUENA NOTA...........

// filePath = Application.persistentDataPath+"/"+fileName; // YOU MUST USE "Application.persistentDataPath" // YOU CANNOT USE ANYTHING ELSE // NOTHING OTHER THAN "Application.persistentDataPath" WORKS // ALL OTHER OPTIONS FAIL ON ALL PLATFORMS // YOU CAN >ONLY< USE Application.persistentDataPath IN UNITY

Puede almacenar la información en cualquiera de los formatos, como JSON o csv. Como tiene una pequeña cantidad de información, puede mantener trivialmente el json como una Lista y acceder a él fácilmente.

Tenga en cuenta que si no está familiarizado con tareas de programación muy básicas, como usar JSON o csv (todo extremadamente fácil), deberá estudiarlo. SO preguntas / respuestas no pueden ser tutoriales.

(2) puede aprender sobre el uso de la base de datos SQL local, que vale la pena aprender. Haz lo que dice Łukasz Motyczka en los comentarios.

(3) es cierto que su tarea es tan pequeña que podría usar PlayerPrefs . Sin embargo, tenga en cuenta que esta es la forma más difícil. Sería un verdadero desastre tratar de usar PlayerPrefs como una base de datos simple. Entonces no hagas eso.

(4) Tenga en cuenta que en la práctica no hay "aplicaciones locales" en estos días. Para ser un "desarrollador de aplicaciones" es ser un desarrollador de la nube, probablemente necesitará usar Firebase o similar (¡Parse se ha cerrado sorprendentemente este año!)

Estoy trabajando en un juego 2D que luego se usará como actividad publicitaria en un puesto, necesito almacenar información del usuario, nombre, número, correo electrónico y puntaje. Sus datos pueden exceder a miles de entradas. ¿Cuál será la mejor y libre forma de implementarlo en unity5? El juego se implementará en Android.


Para cualquier otra persona que venga aquí porque están tratando de acceder a Application.StreamingDataPath (o cualquier otra cosa dentro de un APK), no puede simplemente usar la API de archivo como se describe en la respuesta de Fattie. Debe utilizar una solicitud web, ya que el APK es esencialmente una carpeta comprimida y System.IO no puede acceder a los componentes internos de estos paquetes.

Deberá usar UnityWebRequest para OBTENER los datos de la ubicación deseada dentro del PKG. Puede incluir archivos sin formato en su juego agregando una carpeta en cualquier parte del proyecto y llamándolo StreamingAssets (las carpetas de recursos se reconstruyen dentro del APK y no se puede acceder directamente, también se cargan en la memoria en tiempo de ejecución, lo que hace que el juego comience muy lentamente), luego apunte su UWR a Application.streamingDataPath y obtenga los datos de request.downloadHandler.data.

Para guardar nuevos datos, debe usar Application.persistantDataPath, en cuyo punto usar System.IO.File está bien.

Aquí hay un ejemplo de cómo obtener datos de la carpeta APK! / Assets / (donde Android coloca la carpeta StreamingAssets) y luego guardarla en una ubicación para su uso posterior.

public IEnumerator GetSomeDataAndThenSave(string path) { UnityWebRequest request = UnityWebRequest.Get(path); request.Send(); while(!request.isDone) { yield return null; } if (!request.isNetworkError && (request.responseCode == 0 || request.responseCode == (long)System.Net.HttpStatusCode.OK)) { WrapperClass yourClassList = new WrapperClass(); YourClassList.members = JsonUtility.FromJson<YourClass>(request.downloadHandler.text); var bytes = System.Text.Encoding.UTF8.GetBytes(JsonUtility.ToJson(instance)); File.WriteAllBytes(Application.persistentDataPath + "/SubDirectory/" + Path.GetFileName(path), bytes); } request.Dispose(); }

Espero que eso aclare las cosas para cualquier otra persona que tenga el mismo problema.


Utiliza PlayerPrefs(Key,Value) para almacenar los datos en Unity. Es una de las formas simples de almacenar datos en Unity.