Skriva data till Unitys rekommenderade mappsökväg som anges av persistentDataPath

Sidan uppdaterad :
Datum för skapande av sida :

Verifiering miljö

Windows
  • Fönster 11
Unity-redaktör
  • 2021.3.3F1
Paket för inmatningssystem
  • 1.3.0

Förutsättningar för det här tipset

Följande inställningar har gjorts i förväg som en förutsättning för beskrivningen av detta tips.

Först

I de tidigare tipsenPlayerPrefs använde vi metoden för att spara och ladda data. Detta är dock inte lämpligt för användning med tanke på hantering av enorma data och datadelning.

Den här gången sparar och laddar vi data i den lokala mappkatalogen. I grund och botten kan du ange skrivplatsen fritt, men det är mer fördelaktigt att använda det angivna persistentDataPath i Unity, så den här gången kommer vi att använda detta.

Placering och hantering av användargränssnitt

För detta kommer vi att använda föregående tips "Läs och skriv data med PlayerPrefs" som det är, så Vänligen hänvisa till det och implementera det till den punkt där du kan utföra knappbehandling.

För övrigt kommer jag också att placera en plats för att visa värdet av att användas persistentDataPath den här gången.

Kontrollera var mappsökvägen är för att spara filen

Du kan hämta mappsökvägen för data som ska användas den Application.persistentDataPath här gången med . Låt oss först visa var platsen är.

Start Nu ska vi skapa en metod för att visa ett värde i ett textfält.

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

  // 省略
}

När du kör den bör du se sökvägen på undersidan.

Eftersom vi kör på Windows den här gången ser vägen ut så här. Observera att innehållet i sökvägen kan ändras beroende på den exekverande användaren och "Företagsnamn" eller "Produktnamn" i projektinställningarna. När du skapar ett spel ska du välja "CompanyName" och "ProductName" innan spelet släpps och inte ändra det senare.

Den här sökvägen beror på vilken plattform du kör på. Nedan är sökvägen som anges på den officiella hemsidan. Det kan ändras beroende på din version av Unity, så se till att köra det och kolla in det.

Spara värdet

Så länge du bestämmer dig för målsökvägen kan skrivning och läsning av data hanteras av .NET standardbibliotek. Den här gången kombinerar vi data i en klass och skriver strängar i JSON och skriver strängar i 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("保存しました。");
  }

  // 省略
}

Innehållet i de tidigare tipsen stöds av .NET Standard Library, så jag tror inte att det är något särskilt svårt. Låt oss köra det först och spara det.

Om du tittar på sökvägsplatsen ser du att filen sparas.

När du öppnar textfilen kan du se att dina indata sparas i JSON-format.

Vi använder en klass så att vi enkelt kan File skriva filer den här gången,StreamWriter men det finns inga problem om vi använder andra klasser som .

Få ett sparat värde

Jag tycker inte att det är svårt att läsa heller.

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

Du kan läsa den sparade texten och deserialisera JSON-strängen JsonUtility.FromJson med metoden för att återställa den.

Prova att köra spelet och se att inmatningsfältet är ifyllt genom att klicka på knappen Ladda från tom.

Sammanfattning

Application.persistentDataPath Jag kunde läsa och skriva data till den angivna platsen med . Det kan sparas som en fil, så det är också möjligt att lagra enorma data. Data som lagras i den här mappsökvägen kan dock synkroniseras i flera miljöer, så Om du antar det bör du överväga om du ska spara en stor fil eller spara den på en annan plats.