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