Записване на данни в препоръчания от 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" в настройките на проекта. Когато създавате игра, вземете решение за "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 Успях да чета и записвам данни на определеното място с помощта на . Той може да бъде запазен като файл, така че е възможно да се съхраняват и огромни данни. Въпреки това, данните, съхранени в тази папка път може да се синхронизира в няколко среди, така че Ако предположите това, трябва да помислите дали да запишете голям файл, или да го запишете на друго място.