Verileri Unity'nin persistentDataPath tarafından belirtilen önerilen klasör yoluna yazma
Doğrulama ortamı
- Windows
-
- Pencereler 11
- Birlik Editörü
-
- 2021.3.3f1
- Giriş Sistemi Paketi
-
- 1.3.0
Bu ipucu için önkoşullar
Aşağıdaki ayarlar, bu ipucunun açıklaması için bir öncül olarak önceden yapılmıştır.
İlk başta
Önceki ipuçlarında , PlayerPrefs
veri kaydetme ve yükleme yöntemini kullandık.
Bununla birlikte, bu, büyük verilerin işlenmesi ve veri paylaşımı açısından kullanım için uygun değildir.
Bu kez, verileri yerel klasör dizinine kaydedip yükleyeceğiz.
Temel olarak, yazma konumunu özgürce belirtebilirsiniz, ancak Unity'de belirtilenleri persistentDataPath
kullanmak daha avantajlıdır, bu yüzden bu sefer bunu kullanacağız.
Kullanıcı arabirimi yerleştirme ve kullanma
Bunun için, önceki ipucunu kullanacağız "PlayerPrefs kullanarak verileri okuma ve yazma" olduğu gibi, bu yüzden Lütfen buna bakın ve düğme işlemeyi gerçekleştirebileceğiniz noktaya kadar uygulayın.
Bu arada, bu sefer kullanılacak persistentDataPath
değeri göstermek için bir yer de yerleştireceğim.
Dosyayı kaydetmek için klasör yolunun nerede olduğunu denetleyin
Application.persistentDataPath
Bu sefer kullanılacak verilerin klasör yolunu . İlk olarak, konumun nerede olduğunu gösterelim.
Start
Metin alanında bir değer görüntülemek için bir yöntem oluşturalım.
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;
}
// 省略
}
Çalıştırdığınızda, alt taraftaki yolu görmelisiniz.
Bu sefer Windows'ta çalıştığımızdan, yol şöyle görünüyor. Yolun içeriğinin, yürütücü kullanıcıya ve proje ayarlarında "CompanyName" veya "ProductName" e bağlı olarak değişebileceğini lütfen unutmayın. Bir oyun oluştururken, oyun yayınlanmadan önce "CompanyName" ve "ProductName" seçeneklerine karar verin ve daha sonra değiştirmeyin.
Bu yol, üzerinde çalıştığınız platforma bağlıdır. Aşağıda resmi web sitesinde listelenen yol bulunmaktadır. Unity sürümünüze bağlı olarak değişebilir, bu yüzden çalıştırdığınızdan ve kontrol ettiğinizden emin olun.
Değeri kaydedin
Hedef yola karar verdiğiniz sürece, veri yazma ve okuma işlemleri .NET standart kitaplığı tarafından işlenebilir. Bu kez, verileri tek bir sınıfta birleştiriyoruz ve JSON'da dizeler yazıyoruz ve dizeleri toplu olarak yazıyoruz.
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("保存しました。");
}
// 省略
}
Önceki ipuçlarının içeriği .NET Standard Library tarafından desteklenmektedir, bu nedenle özellikle zor bir şey olduğunu düşünmüyorum. Önce onu çalıştıralım ve kaydedelim.
Yol konumuna bakarsanız, dosyanın kaydedildiğini göreceksiniz.
Metin dosyasını açtığınızda, girişinizin JSON biçiminde kaydedildiğini görebilirsiniz.
Bu sefer dosyaları kolayca yazabilmemiz File
için bir sınıf kullanıyoruz,StreamWriter
ancak . gibi diğer sınıfları kullanırsak sorun olmaz.
Kaydedilen bir değer elde edin
Okumanın da zor olduğunu düşünmüyorum.
<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("読み込みました。");
}
Kaydedilen metni okuyabilir ve JSON dizesini geri yükleme yöntemiyle JsonUtility.FromJson
seri durumdan çıkarabilirsiniz.
Oyunu çalıştırmayı ve Boştan yükle düğmesine tıklayarak giriş alanının doldurulduğunu görmeyi deneyin.
Özet
Application.persistentDataPath
Kullanarak belirtilen konuma veri okuyabildim ve yazabildim.
Bir dosya olarak kaydedilebilir, bu nedenle büyük verileri depolamak da mümkündür.
Ancak, bu klasör yolunda depolanan veriler birden çok ortamda eşitlenebilir, bu nedenle
Bunu varsayarsanız, büyük bir dosyayı kaydetmeyi mi yoksa başka bir konuma mı kaydetmeyi düşünmelisiniz.