Εγγραφή δεδομένων στη συνιστώμενη διαδρομή φακέλου του Unity που καθορίζεται από το persistentDataPath
Περιβάλλον επαλήθευσης
- παράθυρα
-
- Παράθυρα 11
- Επεξεργαστής ενότητας
-
- 2021.3.3στ1
- Πακέτο συστήματος εισόδου
-
- 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 Standard Library, οπότε δεν νομίζω ότι υπάρχει κάτι ιδιαίτερα δύσκολο. Ας το τρέξουμε πρώτα και ας το αποθηκεύσουμε.
Εάν κοιτάξετε τη θέση της διαδρομής, θα δείτε ότι το αρχείο έχει αποθηκευτεί.
Όταν ανοίγετε το αρχείο κειμένου, μπορείτε να δείτε ότι η εισαγωγή σας αποθηκεύεται σε μορφή 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
Ήμουν σε θέση να διαβάσω και να γράψω δεδομένα στην καθορισμένη τοποθεσία χρησιμοποιώντας το .
Μπορεί να αποθηκευτεί ως αρχείο, επομένως είναι επίσης δυνατή η αποθήκευση τεράστιων δεδομένων.
Ωστόσο, τα δεδομένα που είναι αποθηκευμένα σε αυτήν τη διαδρομή φακέλου ενδέχεται να συγχρονιστούν σε πολλά περιβάλλοντα, επομένως
Εάν υποθέσετε ότι, θα πρέπει να εξετάσετε εάν θα αποθηκεύσετε ένα μεγάλο αρχείο ή θα το αποθηκεύσετε σε άλλη θέση.