Запись данных в рекомендуемый Unity путь к папке, указанный в параметре persistentDataPath

Страница обновлена :
Дата создания страницы :

Среда верификации

Виндоус
  • Windows 11
Редактор Unity
  • 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" в настройках проекта. При создании игры определитесь с "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 Я смог считывать и записывать данные в указанное местоположение с помощью . Его можно сохранить в виде файла, поэтому также можно хранить огромные данные. Однако данные, хранящиеся в этой папке, могут быть синхронизированы в нескольких средах, поэтому Если вы предполагаете это, вам следует подумать о том, следует ли сохранить большой файл или сохранить его в другом месте.