Zapisz dane w zalecanej ścieżce folderu Unity określonej przez persistentDataPath
Ś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.