Verileri Unity'nin persistentDataPath tarafından belirtilen önerilen klasör yoluna yazma

Sayfa güncel :
Sayfa oluşturma tarihi :

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.