Skriv data til Unitys anbefalede mappesti, der er angivet af persistentDataPath

Side opdateret :
Dato for oprettelse af side :

Miljø til bekræftelse

Windows
  • Windows 11
Enhedslistens redaktør
  • 2021.3.3f1
Input System Pakke
  • 1.3.0

Forudsætninger for dette tip

Følgende indstillinger er foretaget på forhånd som en forudsætning for beskrivelsen af dette tip.

Først

I de foregående tipPlayerPrefs brugte vi metoden til at gemme og indlæse data. Dette er dog ikke egnet til brug ud fra et synspunkt om håndtering af enorme data og datadeling.

Denne gang gemmer og indlæser vi data i den lokale mappemappe. Grundlæggende kan du frit angive skriveplaceringen, men det er mere fordelagtigt at bruge det angivne persistentDataPath i Unity, så denne gang bruger vi dette.

Placering og håndtering af brugergrænsefladen

Til dette vil vi bruge det forrige tip "Læs og skriv data ved hjælp af PlayerPrefs" som det er, så Se det og implementer det til det punkt, hvor du kan udføre knapbehandling.

I øvrigt vil jeg også placere et sted at vise værdien af at blive brugt persistentDataPath denne gang.

Kontroller, hvor mappestien er for at gemme filen

Du kan få mappestien Application.persistentDataPath til de data, der skal bruges denne gang med . Lad os først vise, hvor placeringen er.

Start Lad os oprette en metode til at vise en værdi i et tekstfelt.

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ører det, skal du se stien på undersiden.

Da vi kører på Windows denne gang, ser stien sådan ud. Bemærk, at indholdet af stien kan ændre sig afhængigt af den eksekverende bruger og "CompanyName" eller "ProductName" i projektindstillingerne. Når du opretter et spil, skal du beslutte dig for "CompanyName" og "ProductName", før spillet udgives, og ikke ændre det senere.

Denne sti afhænger af den platform, du kører på. Nedenfor er stien angivet på den officielle hjemmeside. Det kan ændre sig afhængigt af din version af Unity, så sørg for at køre det og tjekke det ud.

Gem værdien

Så længe du beslutter dig for destinationsstien, kan skrivning og læsning af data håndteres af .NET standardbiblioteket. Denne gang kombinerer vi dataene i en klasse og skriver strenge i JSON og skriver strenge 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("保存しました。");
  }

  // 省略
}

Indholdet af de tidligere tip understøttes af .NET Standard Library, så jeg tror ikke, der er noget særligt svært. Lad os køre det først og gemme det.

Hvis du ser på stiens placering, vil du se, at filen er gemt.

Når du åbner tekstfilen, kan du se, at dit input gemmes i JSON-format.

Vi bruger en klasse, så vi let kan File skrive filer denne gang, men der er ikke noget problem,StreamWriter hvis vi bruger andre klasser som f.eks .

Få en gemt værdi

Jeg synes heller ikke, det er svært at læse.

/// <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æse den gemte tekst og deserialisere JSON-strengen med metoden JsonUtility.FromJson til at gendanne den.

Prøv at køre spillet og se, at inputfeltet er udfyldt ved at klikke på knappen Indlæs fra tom.

Resumé

Application.persistentDataPath Jeg var i stand til at læse og skrive data til det angivne sted ved hjælp af . Det kan gemmes som en fil, så det er også muligt at gemme enorme data. Data, der er gemt i denne mappesti, kan dog synkroniseres i flere miljøer, så Hvis du antager det, bør du overveje, om du vil gemme en stor fil eller gemme den et andet sted.