Écrire des données dans le chemin de dossier recommandé par Unity spécifié par persistentDataPath

Page mise à jour :
Date de création de la page :

Environnement de vérification

Windows
  • Fenêtres 11
Éditeur Unity
  • 2021.3.3f1
Package système d’entrée
  • 1.3.0

Conditions préalables à cette astuce

Les paramètres suivants ont été définis à l’avance comme prémisse pour la description de cette astuce.

Au début

Dans les conseils précédents, PlayerPrefs nous avons utilisé la méthode d’enregistrement et de chargement des données. Cependant, cela ne convient pas à une utilisation du point de vue du traitement d’énormes données et du partage de données.

Cette fois, nous allons enregistrer et charger les données dans le répertoire du dossier local. Fondamentalement, vous pouvez spécifier l’emplacement d’écriture librement, mais il est plus avantageux d’utiliser le spécifié persistentDataPath dans Unity, donc cette fois, nous allons l’utiliser.

Placement et gestion de l’interface utilisateur

Pour cela, nous utiliserons l’astuce précédente « Lire et écrire des données à l’aide de PlayerPrefs » telle quelle, donc Veuillez vous y référer et l’implémenter au point où vous pouvez effectuer un traitement des boutons.

Incidemment, je vais également placer un endroit pour afficher la valeur de à utiliser persistentDataPath cette fois.

Vérifier où se trouve le chemin d’accès au dossier pour enregistrer le fichier

Vous pouvez obtenir le chemin d’accès Application.persistentDataPath au dossier des données à utiliser cette fois avec . Tout d’abord, montrons où se trouve l’emplacement.

Start Créons une méthode pour afficher une valeur dans un champ de texte.

using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ButtonEvent : MonoBehaviour
{
  // 省略

  /// <summary>パステキスト。</summary>
  [SerializeField] Text TextPath;


  /// <summary>最初に一度だけ呼ばれます。</summary>
  private void Start()
  {
    TextPath.text = Application.persistentDataPath;
  }

  // 省略
}

Lorsque vous l’exécutez, vous devriez voir le chemin sur le dessous.

Puisque nous fonctionnons sous Windows cette fois, le chemin ressemble à ceci. Veuillez noter que le contenu du chemin peut changer en fonction de l’utilisateur exécutant et de « CompanyName » ou « ProductName » dans les paramètres du projet. Lors de la création d’un jeu, choisissez « CompanyName » et « ProductName » avant la sortie du jeu et ne le modifiez pas plus tard.

Ce chemin dépend de la plate-forme sur laquelle vous exécutez. Vous trouverez ci-dessous le chemin indiqué sur le site officiel. Il peut changer en fonction de votre version de Unity, alors assurez-vous de l’exécuter et de le vérifier.

Enregistrer la valeur

Tant que vous décidez du chemin de destination, l’écriture et la lecture des données peuvent être gérées par la bibliothèque standard .NET. Cette fois, nous combinons les données en une seule classe et écrivons des chaînes en JSON et écrivons des chaînes en vrac.

using System;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;

public class ButtonEvent : MonoBehaviour
{
  // 省略

  /// <summary>セーブデータ。</summary>
  public class SaveData
  {
    public string Name;
    public string HP;
    public string Attack;
    public string Money;
  }

  /// <summary>
  /// 保存ボタンをクリックしたときの処理。
  /// </summary>
  public void OnClickSave()
  {
    // 保存するデータを作成
    var data = new SaveData()
    {
      Name = InputFieldName.text,
      HP = InputFieldHP.text,
      Attack = InputFieldAttack.text,
      Money = InputFieldMoney.text,
    };

    // オブジェクトを JSON 文字列にシリアライズ
    var json = JsonUtility.ToJson(data);

    // 所定の場所にテキストファイルとして保存
    File.WriteAllText(Path.Combine(Application.persistentDataPath, "SaveData.txt"), json);

    Debug.Log("保存しました。");
  }

  // 省略
}

Le contenu des conseils précédents est pris en charge par la bibliothèque standard .NET, donc je ne pense pas qu’il y ait quelque chose de particulièrement difficile. Exécutons-le d’abord et enregistrons-le.

Si vous regardez l’emplacement du chemin, vous verrez que le fichier est enregistré.

Lorsque vous ouvrez le fichier texte, vous pouvez voir que votre entrée est enregistrée au format JSON.

Nous utilisons une classe afin de pouvoir File écrire facilement des fichiers cette fois,StreamWriter mais il n’y a pas de problème si nous utilisons d’autres classes telles que .

Obtenir une valeur sauvegardée

Je ne pense pas que ce soit difficile à lire non plus.

/// <summary>
/// 読み込みボタンをクリックしたときの処理。
/// </summary>
public void OnClickLoad()
{
  // 保存されているテキストファイルを読み込む
  var json = File.ReadAllText(Path.Combine(Application.persistentDataPath, "SaveData.txt"));

  // JSON テキストから指定したオブジェクトにデシリアライズ
  var data = JsonUtility.FromJson<SaveData>(json);

  // 読み込んだ値を各フィールドにセット
  InputFieldName.text = data.Name;
  InputFieldHP.text = data.HP;
  InputFieldAttack.text = data.Attack;
  InputFieldMoney.text = data.Money;

  Debug.Log("読み込みました。");
}

Vous pouvez lire le texte enregistré et désérialiser la chaîne JSON avec la JsonUtility.FromJson méthode pour la restaurer.

Essayez d’exécuter le jeu et voyez que le champ de saisie est rempli en cliquant sur le bouton Charger à partir de vide.

Résumé

Application.persistentDataPath J’ai pu lire et écrire des données à l’emplacement spécifié à l’aide de . Il peut être enregistré sous forme de fichier, il est donc également possible de stocker des données volumineuses. Toutefois, les données stockées dans ce chemin d’accès au dossier peuvent être synchronisées dans plusieurs environnements, de sorte que Si vous supposez cela, vous devez déterminer s’il faut enregistrer un fichier volumineux ou l’enregistrer dans un autre emplacement.