Escriviu dades al camí de carpeta recomanat per Unity especificat per persistentDataPath

Pàgina actualitzada :
Data de creació de la pàgina :

Entorn de verificació

Windows
  • Finestres 11
Editor d'unitat
  • 2021.3.3f1
Paquet del sistema d'entrada
  • 1.3.0

Requisits previs per a aquest consell

La configuració següent s'ha fet amb antelació com a premissa per a la descripció d'aquest consell.

Al principi

En els consells anteriors, PlayerPrefs hem utilitzat el mètode de desar i carregar dades. Tanmateix, això no és adequat per utilitzar-lo des del punt de vista del maneig d'enormes dades i compartició de dades.

Aquesta vegada, guardarem i carregarem dades al directori de carpetes locals. Bàsicament, podeu especificar la ubicació d'escriptura lliurement, però és més avantatjós utilitzar l'especificat persistentDataPath a Unity, de manera que aquesta vegada utilitzarem això.

Col·locació i manipulació de la interfície d'usuari

Per a això, utilitzarem el consell anterior "Llegir i escriure dades utilitzant PlayerPrefs" tal com és, així que Si us plau, referiu-vos a això i implementeu-lo fins al punt en què pugueu realitzar el processament de botons.

Per cert, també col·locaré un lloc per mostrar el valor de que s'utilitzarà persistentDataPath aquesta vegada.

Comproveu on és el camí de la carpeta per desar el fitxer

Podeu obtenir la ruta de carpeta Application.persistentDataPath de les dades que s'utilitzaran aquesta vegada amb . En primer lloc, mostrem on és la ubicació.

Start Creem un mètode per mostrar un valor en un camp de text.

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

  // 省略
}

Quan l'executeu, hauríeu de veure el camí a la part inferior.

Com que aquesta vegada estem executant a Windows, el camí sembla així. Tingueu en compte que el contingut del camí pot canviar en funció de l'usuari executor i de "NomEmpresa" o "NomProducte" a la configuració del projecte. Quan creeu un joc, decidiu "NomEmpresa" i "NomProducte" abans del llançament del joc i no el canvieu més tard.

Aquest camí depèn de la plataforma en què estigueu executant. A continuació es mostra el camí que apareix al lloc web oficial. Pot canviar en funció de la vostra versió d'Unity, així que assegureu-vos d'executar-lo i comprovar-ho.

Desa el valor

Sempre que decidiu el camí de destinació, les dades d'escriptura i lectura poden ser gestionades per la biblioteca estàndard .NET. Aquesta vegada, combinem les dades en una sola classe i escrivim cadenes en JSON i escrivim cadenes a granel.

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

  // 省略
}

El contingut dels consells anteriors està recolzat per la biblioteca estàndard .NET, de manera que no crec que hi hagi res especialment difícil. Executem-lo primer i guardem-lo.

Si mireu la ubicació del camí, veureu que el fitxer està desat.

Quan obriu el fitxer de text, podeu veure que l'entrada es desa en format JSON.

Estem utilitzant una classe perquè puguem File escriure arxius fàcilment aquesta vegada,StreamWriter però no hi ha cap problema si utilitzem altres classes com .

Obtenir un valor desat

Tampoc crec que sigui difícil de llegir.

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

Podeu llegir el text desat i deserialitzar la cadena JSON amb el JsonUtility.FromJson mètode per restaurar-la.

Proveu d'executar el joc i veure que el camp d'entrada s'emplena fent clic al botó Carrega des del buit.

Resum

Application.persistentDataPath Vaig poder llegir i escriure dades a la ubicació especificada utilitzant . Es pot guardar com a fitxer, de manera que també és possible emmagatzemar dades enormes. No obstant això, les dades emmagatzemades en aquesta ruta de carpeta es poden sincronitzar en diversos entorns, de manera que Si assumiu això, hauríeu de considerar si voleu desar un fitxer gran o desar-lo en una altra ubicació.