Escribir datos en la ruta de carpeta recomendada por Unity especificada por persistentDataPath

Actualización de la página :
Fecha de creación de la página :

Entorno de verificación

Windows
  • Ventanas 11
Unity Editor
  • 2021.3.3F1
Paquete del sistema de entrada
  • 1.3.0

Requisitos previos para esta sugerencia

Los siguientes ajustes se han realizado de antemano como premisa para la descripción de este consejo.

Al principio

En los consejos anteriores, PlayerPrefs utilizamos el método de guardar y cargar datos. Sin embargo, esto no es adecuado para su uso desde el punto de vista del manejo de datos enormes y el intercambio de datos.

Esta vez, guardaremos y cargaremos los datos en el directorio de carpetas locales. Básicamente, puede especificar la ubicación de escritura libremente, pero es más ventajoso usar la especificada persistentDataPath en Unity, por lo que esta vez usaremos esto.

Ubicación y manejo de la interfaz de usuario

Para esto, usaremos el consejo anterior "Leer y escribir datos usando PlayerPrefs" tal como está, por lo que Consulte eso e impleméntelo hasta el punto en que pueda realizar el procesamiento de botones.

Por cierto, también colocaré un lugar para mostrar el valor de ser utilizado persistentDataPath esta vez.

Compruebe dónde está la ruta de la carpeta para guardar el archivo

Puede obtener la ruta de carpeta Application.persistentDataPath de los datos que se utilizarán esta vez con . Primero, mostremos dónde está la ubicación.

Start Vamos a crear un método para mostrar un valor en un campo de texto.

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

  // 省略
}

Cuando lo ejecutes, deberías ver el camino en la parte inferior.

Dado que esta vez estamos ejecutando en Windows, la ruta se ve así. Tenga en cuenta que el contenido de la ruta puede cambiar dependiendo del usuario ejecutor y "CompanyName" o "ProductName" en la configuración del proyecto. Al crear un juego, decida "CompanyName" y "ProductName" antes de lanzar el juego y no lo cambie más tarde.

Esta ruta depende de la plataforma en la que se esté ejecutando. A continuación se muestra la ruta que aparece en el sitio web oficial. Puede cambiar dependiendo de tu versión de Unity, así que asegúrate de ejecutarlo y echarle un vistazo.

Guarde el valor

Siempre que decida la ruta de destino, la biblioteca estándar de .NET puede controlar la escritura y lectura de datos. Esta vez, estamos combinando los datos en una clase y escribiendo cadenas en JSON y escribiendo cadenas en masa.

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 contenido de las sugerencias anteriores es compatible con la biblioteca estándar de .NET, por lo que no creo que haya nada particularmente difícil. Ejecutémoslo primero y guardémoslo.

Si observa la ubicación de la ruta, verá que el archivo está guardado.

Cuando abre el archivo de texto, puede ver que su entrada se guarda en formato JSON.

Estamos usando una clase para que podamos File escribir archivos fácilmente esta vez,StreamWriter pero no hay problema si usamos otras clases como .

Obtenga un valor guardado

Tampoco creo que sea difícil de leer.

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

Puede leer el texto guardado y deserializar la cadena JSON con el JsonUtility.FromJson método para restaurarla.

Intente ejecutar el juego y vea que el campo de entrada se rellena haciendo clic en el botón Cargar desde vacío.

Resumen

Application.persistentDataPath Pude leer y escribir datos en la ubicación especificada usando . Se puede guardar como un archivo, por lo que también es posible almacenar datos enormes. Sin embargo, los datos almacenados en esta ruta de carpeta pueden sincronizarse en varios entornos, por lo que Si asume eso, debe considerar si desea guardar un archivo grande o guardarlo en otra ubicación.