Scrivere i dati nel percorso di cartella consigliato di Unity specificato da persistentDataPath

Pagina aggiornata :
Data di creazione della pagina :

Ambiente di verifica

Finestre
  • Windows 11
Unity Editor
  • 2021.3.3f1
Pacchetto del sistema di input
  • 1.3.0

Prerequisiti per questo suggerimento

Le seguenti impostazioni sono state effettuate in anticipo come premessa per la descrizione di questo suggerimento.

Dapprima

Nei suggerimenti precedenti, PlayerPrefs abbiamo usato il metodo di salvataggio e caricamento dei dati. Tuttavia, questo non è adatto per l'uso dal punto di vista della gestione di enormi quantità di dati e della condivisione dei dati.

Questa volta, salveremo e caricheremo i dati nella directory delle cartelle locali. Fondamentalmente, puoi specificare liberamente la posizione di scrittura, ma è più vantaggioso usare quella specificata persistentDataPath in Unity, quindi questa volta useremo questo.

Posizionamento e gestione dell'interfaccia utente

Per questo, useremo il suggerimento precedente "Leggi e scrivi dati usando PlayerPrefs" così com'è, quindi Si prega di fare riferimento a questo e implementarlo fino al punto in cui è possibile eseguire l'elaborazione dei pulsanti.

Per inciso, metterò anche un posto dove visualizzare il valore di da utilizzare persistentDataPath questa volta.

Controllare dove si trova il percorso della cartella in cui salvare il file

È possibile ottenere il Application.persistentDataPath percorso della cartella dei dati da utilizzare questa volta con . Per prima cosa, mostriamo dove si trova la posizione.

Start Creiamo un metodo per visualizzare un valore in un campo di testo.

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

  // 省略
}

Quando lo esegui, dovresti vedere il percorso sul lato inferiore.

Poiché questa volta siamo in esecuzione su Windows, il percorso è simile a questo. Si noti che il contenuto del percorso può cambiare a seconda dell'utente in esecuzione e di "CompanyName" o "ProductName" nelle impostazioni del progetto. Quando crei un gioco, decidi su "CompanyName" e "ProductName" prima che il gioco venga rilasciato e non modificarlo in seguito.

Questo percorso dipende dalla piattaforma su cui si sta eseguendo. Di seguito è riportato il percorso elencato sul sito ufficiale. Potrebbe cambiare a seconda della tua versione di Unity, quindi assicurati di eseguirlo e verificarlo.

Salva il valore

Se si decide il percorso di destinazione, la scrittura e la lettura dei dati possono essere gestite dalla libreria standard .NET. Questa volta, stiamo combinando i dati in un'unica classe e scrivendo stringhe in JSON e scrivendo stringhe in blocco.

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

  // 省略
}

I contenuti dei suggerimenti precedenti sono supportati dalla libreria .NET Standard, quindi non penso che ci sia nulla di particolarmente difficile. Eseguiamo prima e salviamolo.

Se guardi la posizione del percorso, vedrai che il file è stato salvato.

Quando apri il file di testo, puoi vedere che il tuo input viene salvato in formato JSON.

Stiamo usando una classe in modo da poter File scrivere facilmente file questa volta,StreamWriter ma non ci sono problemi se usiamo altre classi come .

Ottenere un valore salvato

Non penso che sia difficile da leggere.

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

È possibile leggere il testo salvato e deserializzare la stringa JSON con il JsonUtility.FromJson metodo per ripristinarla.

Prova a eseguire il gioco e a vedere che il campo di input è popolato facendo clic sul pulsante Carica da vuoto.

Sommario

Application.persistentDataPath Sono stato in grado di leggere e scrivere dati nella posizione specificata utilizzando . Può essere salvato come file, quindi è anche possibile memorizzare dati enormi. Tuttavia, i dati memorizzati in questo percorso di cartella possono essere sincronizzati in più ambienti, quindi Se si presume ciò, è necessario valutare se salvare un file di grandi dimensioni o salvarlo in un'altra posizione.