unity persistentdatapath data application c# json unity3d unity5

c# - unity application persistentdatapath location



UbicaciĆ³n de Application.persistentDataPath en una compilaciĆ³n (1)

En la respuesta a continuación:

  • companyname = Nombre de la empresa desde la configuración de compilación
  • nombre del producto = nombre del producto de la configuración de compilación

Windows :

C:/Users/<userprofile>/AppData/LocalLow/<companyname>/<productname>

Tienda de Windows :

%userprofile%/AppData/Local/Packages/<productname>/LocalState

Mac :

~/Library/Application Support/companyname/productname

versión anterior de Unity en Mac:

  • ~/Library/Caches folder

  • ~/Library/Application Support/unity.companyname.productname.

Linux :

$XDG_CONFIG_HOME/unity3d/<companyname>/<productname>

que es lo mismo que

~/.config/unity3d/<companyname>/<productname>

Android :

/Data/Data/com.<companyname>.<productname>/files

con tarjeta SD en el dispositivo Android:

/storage/sdcard0/Android/data/com.<companyname>.<productname>/files

iOS :

/var/mobile/Containers/Data/Application/<RandomFolderName>/Documents

Ejemplo del nombre completo RandomFolderName:

/var/mobile/Containers/Data/Application/<055811B9-D125-41B1-A078-F898B06F8C58>/Documents

En iOS, se te dará acceso a la zona de pruebas de la aplicación, que es la carpeta del documento. Debe crear una carpeta dentro de este directorio para crear un nuevo archivo dentro de ella.

Si tiene valores de datos predeterminados en un archivo json, coloque el archivo en la carpeta Activos / Recursos para que sea de solo lectura y luego TextAsset con TextAsset . Cuando se carga el juego, puedes usar PlayerPrefs para verificar si es la primera vez que se carga el juego.

Si esta es la primera vez, use el valor de TextAsset.text . Si no se usa, entonces el valor se guardó con la clase DataHandler .

Aproximadamente algo como esto:

if (PlayerPrefs.GetInt("FIRSTTIMEOPENING", 1) == 1) { Debug.Log("First Time Opening"); //Set first time opening to false PlayerPrefs.SetInt("FIRSTTIMEOPENING", 0); //USE TextAsset to load data TextAsset txtAsset = (TextAsset)Resources.Load("player", typeof(TextAsset)); string tileFile = txtAsset.text; PlayerInfo pInfo = JsonUtility.FromJson<PlayerInfo>(tileFile); } else { Debug.Log("NOT First Time Opening"); //USE DataHandler to load data PlayerInfo pInfo = DataHandler.loadData<PlayerInfo>("player"); }

Cuando ejecuto mi juego desde el editor y guardo datos de carga, encuentro los datos en: C:/Users/User/AppData/LocalLow/DefaultCompany/projectname/data .

Cuando lo construyo y obtengo un ejecutable, esos datos todavía se cargan bien, pero si los guardo y reinicio, no se guardan. Sin embargo, lo hace cuando lo lanzo desde el Editor.

¿Es esto un error en mi código o los archivos en otro lugar cuando no lo ejecuto desde Unity Editor?

Más tarde, cuando exporto el juego para lanzarlo, tengo archivos I Json de datos persistentes que tienen que venir para que el juego funcione.

Para mayor claridad, esta es la clase que maneja guardar / cargar de Json:

public class DataHandler { //Save Data public static void saveData<T>(T dataToSave, string dataFileName) { string tempPath = Path.Combine(Application.persistentDataPath, "data"); tempPath = Path.Combine(tempPath, dataFileName + ".txt"); //Convert To Json then to bytes string jsonData = JsonUtility.ToJson(dataToSave, true); byte[] jsonByte = Encoding.ASCII.GetBytes(jsonData); //Create Directory if it does not exist if (!Directory.Exists(Path.GetDirectoryName(tempPath))) { Directory.CreateDirectory(Path.GetDirectoryName(tempPath)); } //Debug.Log(path); try { File.WriteAllBytes(tempPath, jsonByte); Debug.Log("Saved Data to: " + tempPath.Replace("/", "//")); } catch (Exception e) { Debug.LogWarning("Failed To PlayerInfo Data to: " + tempPath.Replace("/", "//")); Debug.LogWarning("Error: " + e.Message); } } //Load Data public static T loadData<T>(string dataFileName) { string tempPath = Path.Combine(Application.persistentDataPath, "data"); tempPath = Path.Combine(tempPath, dataFileName + ".txt"); //Exit if Directory or File does not exist if (!Directory.Exists(Path.GetDirectoryName(tempPath))) { Debug.LogWarning("Directory does not exist"); return default(T); } if (!File.Exists(tempPath)) { Debug.Log("File does not exist"); return default(T); } //Load saved Json byte[] jsonByte = null; try { jsonByte = File.ReadAllBytes(tempPath); Debug.Log("Loaded Data from: " + tempPath.Replace("/", "//")); } catch (Exception e) { Debug.LogWarning("Failed To Load Data from: " + tempPath.Replace("/", "//")); Debug.LogWarning("Error: " + e.Message); } //Convert to json string string jsonData = Encoding.ASCII.GetString(jsonByte); //Convert to Object object resultValue = JsonUtility.FromJson<T>(jsonData); return (T)Convert.ChangeType(resultValue, typeof(T)); } public static bool deleteData(string dataFileName) { bool success = false; //Load Data string tempPath = Path.Combine(Application.persistentDataPath, "data"); tempPath = Path.Combine(tempPath, dataFileName + ".txt"); //Exit if Directory or File does not exist if (!Directory.Exists(Path.GetDirectoryName(tempPath))) { Debug.LogWarning("Directory does not exist"); return false; } if (!File.Exists(tempPath)) { Debug.Log("File does not exist"); return false; } try { File.Delete(tempPath); Debug.Log("Data deleted from: " + tempPath.Replace("/", "//")); success = true; } catch (Exception e) { Debug.LogWarning("Failed To Delete Data: " + e.Message); } return success; } }