Schrijf gegevens naar het aanbevolen mappad van Unity dat is opgegeven door persistentDataPath
Verificatieomgeving
- Ramen
-
- Voor Windows 11
- Unity Editor
-
- 2021.3.3f1
- Input systeem pakket
-
- 1.3.0
Vereisten voor deze tip
De volgende instellingen zijn vooraf gemaakt als uitgangspunt voor de beschrijving van deze tip.
Eerst
In de vorige tipsPlayerPrefs
hebben we de methode gebruikt om gegevens op te slaan en te laden.
Dit is echter niet geschikt voor gebruik vanuit het oogpunt van het verwerken van enorme gegevens en het delen van gegevens.
Deze keer zullen we gegevens opslaan en laden in de lokale mapmap.
In principe kunt u de schrijflocatie vrij opgeven, maar het is voordeliger om het opgegeven persistentDataPath
in Unity te gebruiken, dus deze keer zullen we dit gebruiken.
Plaatsing en afhandeling van de gebruikersinterface
Hiervoor gebruiken we de vorige tip "Lees en schrijf gegevens met PlayerPrefs" zoals deze is, dus Raadpleeg dat en implementeer het tot het punt waarop u knopverwerking kunt uitvoeren.
Overigens zal ik ook een plek plaatsen om de waarde van te gebruiken persistentDataPath
deze keer weer te geven.
Controleer waar het mappad zich bevindt om het bestand op te slaan
U kunt het Application.persistentDataPath
mappad van de gegevens die deze keer moeten worden gebruikt, ophalen met . Laten we eerst laten zien waar de locatie is.
Start
Laten we een methode maken om een waarde in een tekstveld weer te geven.
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;
}
// 省略
}
Wanneer u het uitvoert, zou u het pad aan de onderkant moeten zien.
Omdat we deze keer op Windows draaien, ziet het pad er als volgt uit. Houd er rekening mee dat de inhoud van het pad kan veranderen afhankelijk van de uitvoerende gebruiker en "Bedrijfsnaam" of "Productnaam" in de projectinstellingen. Wanneer u een game maakt, beslist u over "Bedrijfsnaam" en "Productnaam" voordat het spel wordt uitgebracht en wijzigt u deze later niet.
Dit pad is afhankelijk van het platform waarop u draait. Hieronder staat het pad dat op de officiële website wordt vermeld. Het kan veranderen afhankelijk van uw versie van Unity, dus zorg ervoor dat u het uitvoert en bekijkt.
Sla de waarde op
Zolang u het doelpad bepaalt, kunnen schrijf- en leesgegevens worden verwerkt door de .NET-standaardbibliotheek. Deze keer combineren we de gegevens in één klasse en schrijven we tekenreeksen in JSON en schrijven we tekenreeksen in bulk.
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("保存しました。");
}
// 省略
}
De inhoud van de vorige tips wordt ondersteund door de .NET Standard Library, dus ik denk niet dat er iets bijzonder moeilijks is. Laten we het eerst uitvoeren en opslaan.
Als u naar de padlocatie kijkt, ziet u dat het bestand is opgeslagen.
Wanneer u het tekstbestand opent, kunt u zien dat uw invoer is opgeslagen in JSON-indeling.
We gebruiken een klasse zodat we deze keer gemakkelijk bestanden kunnen File
schrijven, maar er is geen probleem als we andere klassen gebruiken,StreamWriter
zoals .
Krijg een opgeslagen waarde
Ik denk ook niet dat het moeilijk is om te lezen.
<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("読み込みました。");
}
U kunt de opgeslagen tekst lezen en de JSON-tekenreeks deserialiseren met de JsonUtility.FromJson
methode om deze te herstellen.
Probeer het spel uit te voeren en te zien dat het invoerveld is gevuld door op de knop Laden van leeg te klikken.
Samenvatting
Application.persistentDataPath
Ik was in staat om gegevens te lezen en te schrijven naar de opgegeven locatie met behulp van .
Het kan worden opgeslagen als een bestand, dus het is ook mogelijk om enorme gegevens op te slaan.
Gegevens die in dit mappad zijn opgeslagen, kunnen echter in meerdere omgevingen worden gesynchroniseerd, dus
Als u dat aanneemt, moet u overwegen of u een groot bestand wilt opslaan of op een andere locatie wilt opslaan.