Запис даних до рекомендованого Unity шляху до папки, вказаного за допомогою persistentDataPath

Сторінка оновлюється :
Дата створення сторінки :

Середовище перевірки

Вікна
  • вікна 11
Редактор єдності
  • 2021.3.3f1
Пакет системи введення
  • 1.3.0

Передумови для цієї поради

Наступні настройки були зроблені заздалегідь як передумова для опису цієї поради.

Спочатку

У попередніх порадахPlayerPrefs ми використовували метод збереження і завантаження даних. Однак це не підходить для використання з точки зору обробки величезних даних та обміну даними.

Цього разу ми збережемо та завантажимо дані до каталогу локальної папки. В принципі, ви можете вільно вказати місце написання, але вигідніше використовувати зазначене persistentDataPath в Unity, тому цього разу ми скористаємося цим.

Розміщення та обробка інтерфейсу користувача

Для цього ми будемо використовувати попередню пораду "Читати та записувати дані за допомогою PlayerPrefs", як це є, тому Будь ласка, зверніться до цього та реалізуйте його до того моменту, коли ви зможете виконувати обробку кнопок.

До речі, я також розміщу місце для відображення цінності, яка буде використана persistentDataPath цього разу.

Перевірка розташування шляху до папки для збереження файлу

Ви можете отримати Application.persistentDataPath шлях до папки даних, які будуть використовуватися цього разу з . Для початку давайте покажемо, де знаходиться локація.

Start Створимо метод відображення значення в текстовому полі.

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

  // 省略
}

Коли ви запустите його, ви повинні побачити шлях на нижній стороні.

Оскільки цього разу ми працюємо на Windows, шлях виглядає так. Зверніть увагу, що вміст шляху може змінюватися в залежності від користувача-виконавця і "CompanyName" або "ProductName" в налаштуваннях проекту. Створюючи гру, визначтеся з "Назва компанії" та "Назва продукту" перед виходом гри та не змінюйте її пізніше.

Цей шлях залежить від платформи, на якій ви працюєте. Нижче наведено шлях, вказаний на офіційному сайті. Він може змінюватися залежно від вашої версії Unity, тому обов'язково запустіть його та перевірте.

Збережіть значення

Якщо ви визначитеся з кінцевим шляхом, запис і читання даних може оброблятися стандартною бібліотекою .NET. Цього разу ми об'єднуємо дані в один клас і пишемо рядки в JSON і пишемо рядки масово.

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

  // 省略
}

Вміст попередніх порад підтримується стандартною бібліотекою .NET, тому не думаю, що тут є щось особливо складне. Давайте спочатку запустимо його і збережемо.

Якщо ви подивитеся на розташування шляху, то побачите, що файл збережений.

Відкривши текстовий файл, ви побачите, що введені дані зберігаються у форматі JSON.

Ми використовуємо клас, щоб ми могли File легко записувати файли цього разу, але немає проблем, якщо ми використовуємо інші класи,StreamWriter такі як .

Як отримати збережене значення

Я також не думаю, що це важко читати.

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

Ви можете прочитати збережений текст і десеріалізувати рядок JSON за допомогою методу JsonUtility.FromJson його відновлення.

Спробуйте запустити гру і побачити, що поле введення заповнено, натиснувши кнопку Завантажити з порожньої кнопки.

Зведення

Application.persistentDataPath Я зміг прочитати та записати дані у вказане місце за допомогою . Його можна зберегти як файл, тому також можна зберігати величезні дані. Однак дані, що зберігаються в цьому шляху до папки, можуть синхронізуватися в кількох середовищах, тому Якщо ви припускаєте це, вам слід подумати, чи слід зберегти великий файл або зберегти його в іншому розташуванні.