Emplacement de Application.persistentDataPath dans une construction

Lorsque je lance mon jeu depuis l’éditeur et que je sauvegarde les données de chargement, je trouve ces données dans: C:\Users\User\AppData\LocalLow\DefaultCompany\projectname\data .

Lorsque je le construis et que je récupère un exécutable, les données se chargent toujours bien, mais si je sauvegarde et que je redémarre, elles ne sont pas enregistrées. Cependant, cela se produit lorsque je le lance à partir de l’éditeur.

Est-ce une faute dans mon code ou les fichiers sont-ils ailleurs lorsque je ne l’exécute pas sous Unity Editor?

Plus tard, lorsque j’exporte le jeu pour le lancer, j’ai des fichiers de données persistantes I Json qui doivent l’accompagner pour que le jeu fonctionne.

Pour plus de clarté, voici la classe qui gère la sauvegarde / chargement de Json:

 public class DataHandler { //Save Data public static void saveData(T dataToSave, ssortingng dataFileName) { ssortingng tempPath = Path.Combine(Application.persistentDataPath, "data"); tempPath = Path.Combine(tempPath, dataFileName + ".txt"); //Convert To Json then to bytes ssortingng 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(ssortingng dataFileName) { ssortingng 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 ssortingng ssortingng jsonData = Encoding.ASCII.GetSsortingng(jsonByte); //Convert to Object object resultValue = JsonUtility.FromJson(jsonData); return (T)Convert.ChangeType(resultValue, typeof(T)); } public static bool deleteData(ssortingng dataFileName) { bool success = false; //Load Data ssortingng 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; } } 

Dans la réponse ci-dessous:

  • companyname = Nom de l’entreprise à partir des parameters de construction
  • productname = Nom du produit à partir des parameters de construction

entrez la description de l'image ici

Windows :

 C:\Users\\AppData\LocalLow\\ 

Windows Store :

 %userprofile%\AppData\Local\Packages\\LocalState 

Mac :

 ~/Library/Application Support/companyname/productname 

Ancienne version de Unity sur Mac:

  • ~/Library/Caches folder

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

Linux :

 $XDG_CONFIG_HOME/unity3d// 

qui est le même que

 ~/.config/unity3d// 

Android :

 /Data/Data/com../files 

avec carte SD sur l’appareil Android:

 /storage/sdcard0/Android/data/com../files 

iOS :

 /var/mobile/Containers/Data/Application//Documents 

Exemple de nom complet RandomFolderName:

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

Sur iOS, vous aurez access au sandbox de l’application, qui est le dossier Document. Vous devez créer un dossier à l’intérieur de ce répertoire pour pouvoir créer un nouveau fichier.


Si vous avez des valeurs de données par défaut dans un fichier json, placez le fichier dans le dossier Assets / Resources afin qu’il soit en lecture seule, puis lisez-le avec TextAsset . Lorsque le jeu est chargé, vous pouvez utiliser PlayerPrefs pour vérifier si c’est la première fois que le jeu est chargé.

Si c’est la première fois, utilisez la valeur de TextAsset.text . S’il n’est pas utilisé, la valeur est enregistrée avec la classe DataHandler .

À peu près quelque chose comme ça:

 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)); ssortingng tileFile = txtAsset.text; PlayerInfo pInfo = JsonUtility.FromJson(tileFile); } else { Debug.Log("NOT First Time Opening"); //USE DataHandler to load data PlayerInfo pInfo = DataHandler.loadData("player"); }