Schrijf gegevens naar het aanbevolen mappad van Unity dat is opgegeven door persistentDataPath

Pagina bijgewerkt :
Aanmaakdatum van pagina :

Verificatieomgeving

Ramen
  • Voor Windows 11
Unity Editor
  • 2021.3.3f1
Input systeem pakket
  • 1.3.0

Vereisten voor deze tip

De volgende instellingen zijn vooraf gemaakt als uitgangspunt voor de beschrijving van deze tip.

Eerst

In de vorige tipsPlayerPrefs hebben we de methode gebruikt om gegevens op te slaan en te laden. Dit is echter niet geschikt voor gebruik vanuit het oogpunt van het verwerken van enorme gegevens en het delen van gegevens.

Deze keer zullen we gegevens opslaan en laden in de lokale mapmap. In principe kunt u de schrijflocatie vrij opgeven, maar het is voordeliger om het opgegeven persistentDataPath in Unity te gebruiken, dus deze keer zullen we dit gebruiken.

Plaatsing en afhandeling van de gebruikersinterface

Hiervoor gebruiken we de vorige tip "Lees en schrijf gegevens met PlayerPrefs" zoals deze is, dus Raadpleeg dat en implementeer het tot het punt waarop u knopverwerking kunt uitvoeren.

Overigens zal ik ook een plek plaatsen om de waarde van te gebruiken persistentDataPath deze keer weer te geven.

Controleer waar het mappad zich bevindt om het bestand op te slaan

U kunt het Application.persistentDataPath mappad van de gegevens die deze keer moeten worden gebruikt, ophalen met . Laten we eerst laten zien waar de locatie is.

Start Laten we een methode maken om een waarde in een tekstveld weer te geven.

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;
  }

  // 省略
}

Wanneer u het uitvoert, zou u het pad aan de onderkant moeten zien.

Omdat we deze keer op Windows draaien, ziet het pad er als volgt uit. Houd er rekening mee dat de inhoud van het pad kan veranderen afhankelijk van de uitvoerende gebruiker en "Bedrijfsnaam" of "Productnaam" in de projectinstellingen. Wanneer u een game maakt, beslist u over "Bedrijfsnaam" en "Productnaam" voordat het spel wordt uitgebracht en wijzigt u deze later niet.

Dit pad is afhankelijk van het platform waarop u draait. Hieronder staat het pad dat op de officiële website wordt vermeld. Het kan veranderen afhankelijk van uw versie van Unity, dus zorg ervoor dat u het uitvoert en bekijkt.

Sla de waarde op

Zolang u het doelpad bepaalt, kunnen schrijf- en leesgegevens worden verwerkt door de .NET-standaardbibliotheek. Deze keer combineren we de gegevens in één klasse en schrijven we tekenreeksen in JSON en schrijven we tekenreeksen in bulk.

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("保存しました。");
  }

  // 省略
}

De inhoud van de vorige tips wordt ondersteund door de .NET Standard Library, dus ik denk niet dat er iets bijzonder moeilijks is. Laten we het eerst uitvoeren en opslaan.

Als u naar de padlocatie kijkt, ziet u dat het bestand is opgeslagen.

Wanneer u het tekstbestand opent, kunt u zien dat uw invoer is opgeslagen in JSON-indeling.

We gebruiken een klasse zodat we deze keer gemakkelijk bestanden kunnen File schrijven, maar er is geen probleem als we andere klassen gebruiken,StreamWriter zoals .

Krijg een opgeslagen waarde

Ik denk ook niet dat het moeilijk is om te lezen.

/// <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("読み込みました。");
}

U kunt de opgeslagen tekst lezen en de JSON-tekenreeks deserialiseren met de JsonUtility.FromJson methode om deze te herstellen.

Probeer het spel uit te voeren en te zien dat het invoerveld is gevuld door op de knop Laden van leeg te klikken.

Samenvatting

Application.persistentDataPath Ik was in staat om gegevens te lezen en te schrijven naar de opgegeven locatie met behulp van . Het kan worden opgeslagen als een bestand, dus het is ook mogelijk om enorme gegevens op te slaan. Gegevens die in dit mappad zijn opgeslagen, kunnen echter in meerdere omgevingen worden gesynchroniseerd, dus Als u dat aanneemt, moet u overwegen of u een groot bestand wilt opslaan of op een andere locatie wilt opslaan.