Zapisz dane w zalecanej ścieżce folderu Unity określonej przez persistentDataPath

Strona zaktualizowana :
Data utworzenia strony :

Środowisko weryfikacji

Windows
  • Okna 11
Edytor Unity
  • 2021.3.3f1
Pakiet systemu wejściowego
  • 1.3.0

Wymagania wstępne dotyczące tej porady

Poniższe ustawienia zostały wcześniej wprowadzone jako przesłanka do opisu tej wskazówki.

Na początku

W poprzednich wskazówkachPlayerPrefs zastosowaliśmy metodę zapisywania i ładowania danych. Nie nadaje się to jednak do użytku z punktu widzenia obsługi ogromnych ilości danych i udostępniania danych.

Tym razem zapiszemy i załadujemy dane do katalogu folderu lokalnego. Zasadniczo możesz dowolnie określić lokalizację zapisu, ale korzystniej jest użyć określonego persistentDataPath w Unity, więc tym razem użyjemy tego.

Umieszczanie i obsługa interfejsu użytkownika

W tym celu użyjemy poprzedniej wskazówki "Odczyt i zapis danych za pomocą PlayerPrefs" tak jak jest, więc Zapoznaj się z tym i zaimplementuj go do punktu, w którym możesz wykonać przetwarzanie przycisków.

Nawiasem mówiąc, umieszczę również miejsce, w którym pokażę wartość do wykorzystania persistentDataPath tym razem.

Sprawdź, gdzie znajduje się ścieżka folderu, aby zapisać plik

Możesz uzyskać Application.persistentDataPath ścieżkę folderu danych, które mają być używane tym razem z . Najpierw pokażmy, gdzie jest lokalizacja.

Start Stwórzmy metodę wyświetlania wartości w polu tekstowym.

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

  // 省略
}

Po uruchomieniu powinieneś zobaczyć ścieżkę na spodzie.

Ponieważ tym razem działamy w systemie Windows, ścieżka wygląda tak. Należy pamiętać, że zawartość ścieżki może się zmieniać w zależności od wykonującego użytkownika i "CompanyName" lub "ProductName" w ustawieniach projektu. Tworząc grę, zdecyduj się na "CompanyName" i "ProductName" przed wydaniem gry i nie zmieniaj jej później.

Ta ścieżka zależy od platformy, na której działasz. Poniżej znajduje się ścieżka wymieniona na oficjalnej stronie internetowej. Może się to zmienić w zależności od wersji Unity, więc koniecznie uruchom ją i sprawdź.

Zapisz wartość

Tak długo, jak zdecydujesz się na ścieżkę docelową, zapisywanie i odczytywanie danych może być obsługiwane przez standardową bibliotekę .NET. Tym razem łączymy dane w jedną klasę i piszemy ciągi w JSON oraz piszemy ciągi zbiorczo.

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

  // 省略
}

Zawartość poprzednich wskazówek jest obsługiwana przez bibliotekę standardową .NET, więc nie sądzę, że jest coś szczególnie trudnego. Najpierw go uruchom i zapiszmy.

Jeśli spojrzysz na lokalizację ścieżki, zobaczysz, że plik został zapisany.

Po otwarciu pliku tekstowego widać, że dane wejściowe są zapisywane w formacie JSON.

Używamy klasy, dzięki czemu tym razem możemy File łatwo zapisywać pliki, ale nie ma problemu, jeśli używamy innych klas,StreamWriter takich jak .

Uzyskaj zapisaną wartość

Nie sądzę też, że jest to trudne do odczytania.

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

Możesz odczytać zapisany tekst i zdeserializować ciąg JSON za pomocą JsonUtility.FromJson metody jego przywrócenia.

Spróbuj uruchomić grę i sprawdź, czy pole wprowadzania jest wypełnione, klikając przycisk Wczytaj z pustego.

Streszczenie

Application.persistentDataPath Udało mi się odczytać i zapisać dane do określonej lokalizacji za pomocą . Można go zapisać jako plik, dzięki czemu możliwe jest również przechowywanie ogromnych danych. Jednak dane przechowywane w tej ścieżce folderu mogą być synchronizowane w wielu środowiskach, więc Jeśli tak zakładasz, powinieneś rozważyć, czy zapisać duży plik, czy zapisać go w innej lokalizacji.