Tulis data ke laluan folder yang disyorkan Unity yang ditentukan oleh persistentDataPath

Laman dikemaskini :
Tarikh penciptaan halaman :

Persekitaran pengesahan

Windows
  • Windows 11
Penyunting Perpaduan
  • 2021.3.3F1
Pakej Sistem Input
  • 1.3.0

Prasyarat untuk petua ini

Tetapan berikut telah dibuat terlebih dahulu sebagai premis untuk penerangan petua ini.

Pada mulanya

Dalam petua sebelumnya, PlayerPrefs kami menggunakan kaedah menyimpan dan memuatkan data. Walau bagaimanapun, ini tidak sesuai digunakan dari sudut pandang pengendalian data dan perkongsian data yang besar.

Kali ini, kami akan menyimpan dan memuatkan data ke direktori folder tempatan. Pada asasnya, anda boleh menentukan lokasi penulisan secara bebas, tetapi lebih berfaedah untuk menggunakan yang dinyatakan persistentDataPath dalam Perpaduan, jadi kali ini kami akan menggunakannya.

Peletakan dan pengendalian UI

Untuk ini, kami akan menggunakan petua sebelumnya "Baca dan tulis data menggunakan PlayerPrefs" seperti sedia ada, jadi Sila rujuk dan melaksanakannya ke titik di mana anda boleh melakukan pemprosesan butang.

Secara kebetulan, saya juga akan meletakkan tempat untuk memaparkan nilai yang akan digunakan persistentDataPath kali ini.

Semak di mana laluan folder adalah untuk menyimpan fail

Anda boleh mendapatkan Application.persistentDataPath laluan folder data yang akan digunakan kali ini dengan . Mula-mula, mari kita tunjukkan lokasi lokasi tersebut.

Start Mari kita cipta kaedah untuk memaparkan nilai dalam medan teks.

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;
  }

  // 省略
}

Apabila anda menjalankannya, anda harus melihat laluan di bahagian bawah.

Oleh kerana kami menjalankan Windows kali ini, jalannya kelihatan seperti ini. Sila ambil perhatian bahawa kandungan laluan mungkin berubah bergantung pada pengguna pelaksana dan "Nama Syarikat" atau "Nama Produk" dalam tetapan projek. Apabila mencipta permainan, tentukan "Nama Syarikat" dan "ProductName" sebelum permainan dikeluarkan dan jangan ubah kemudian.

Laluan ini bergantung pada platform yang anda jalankan. Berikut adalah laluan yang disenaraikan di laman web rasmi. Ia mungkin berubah bergantung pada versi Unity anda, jadi pastikan anda menjalankannya dan menyemaknya.

Simpan nilai

Selagi anda memutuskan laluan destinasi, menulis dan membaca data boleh dikendalikan oleh pustaka standard .NET. Kali ini, kami menggabungkan data ke dalam satu kelas dan menulis rentetan dalam JSON dan menulis rentetan secara pukal.

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("保存しました。");
  }

  // 省略
}

Kandungan petua sebelumnya disokong oleh Perpustakaan Standard .NET, jadi saya rasa tidak ada yang sangat sukar. Mari kita jalankan dahulu dan simpannya.

Jika anda melihat lokasi laluan, anda akan melihat bahawa fail disimpan.

Apabila anda membuka fail teks, anda boleh melihat bahawa input anda disimpan dalam format JSON.

Kami menggunakan kelas supaya kami boleh File menulis fail dengan mudah kali ini,StreamWriter tetapi tidak ada masalah jika kita menggunakan kelas lain seperti .

Dapatkan nilai yang disimpan

Saya juga tidak fikir sukar untuk dibaca.

/// <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("読み込みました。");
}

Anda boleh membaca teks yang disimpan dan deserialize rentetan JSON dengan kaedah untuk JsonUtility.FromJson memulihkannya.

Cuba jalankan permainan dan lihat bahawa medan input diisi dengan mengklik butang Muatkan dari kosong.

Ringkasan

Application.persistentDataPath Saya dapat membaca dan menulis data ke lokasi yang ditentukan menggunakan . Ia boleh disimpan sebagai fail, jadi ia juga mungkin untuk menyimpan data yang besar. Walau bagaimanapun, data yang disimpan dalam laluan folder ini boleh disegerakkan dalam pelbagai persekitaran, jadi Jika anda menganggapnya, anda harus mempertimbangkan sama ada untuk menyimpan fail besar atau menyimpannya di lokasi lain.