Tulis data ke jalur folder yang direkomendasikan Unity yang ditentukan oleh persistentDataPath

Halaman Diperbarui :
Tanggal pembuatan halaman :

Lingkungan verifikasi

Windows
  • jendela 11
Editor Kesatuan
  • 2021.3.3f1
Paket Sistem Input
  • 1.3.0

Prasyarat untuk tip ini

Pengaturan berikut telah dibuat sebelumnya sebagai premis untuk deskripsi tip ini.

Pada awalnya

Pada tips sebelumnya, PlayerPrefs kami menggunakan metode menyimpan dan memuat data. Namun, ini tidak cocok untuk digunakan dari sudut pandang penanganan data besar dan berbagi data.

Kali ini, kita akan menyimpan dan memuat data ke direktori folder lokal. Pada dasarnya, Anda dapat menentukan lokasi penulisan dengan bebas, tetapi lebih menguntungkan untuk menggunakan yang ditentukan persistentDataPath dalam Unity, jadi kali ini kita akan menggunakan ini.

Penempatan dan penanganan UI

Untuk ini, kami akan menggunakan tip sebelumnya "Baca dan tulis data menggunakan PlayerPrefs" apa adanya, jadi Silakan merujuk ke itu dan menerapkannya ke titik di mana Anda dapat melakukan pemrosesan tombol.

Kebetulan, saya juga akan menempatkan tempat untuk menampilkan nilai yang akan digunakan persistentDataPath kali ini.

Periksa di mana jalur folder untuk menyimpan file

Anda bisa mendapatkan Application.persistentDataPath jalur folder data yang akan digunakan kali ini dengan . Pertama, mari kita tunjukkan di mana lokasinya.

Start Mari buat metode untuk menampilkan nilai dalam bidang 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;
  }

  // 省略
}

Ketika Anda menjalankannya, Anda akan melihat jalur di bagian bawah.

Karena kita berjalan di Windows kali ini, jalurnya terlihat seperti ini. Harap dicatat bahwa konten jalur dapat berubah tergantung pada pengguna pelaksana dan "CompanyName" atau "ProductName" dalam pengaturan proyek. Saat membuat game, tentukan "CompanyName" dan "ProductName" sebelum game dirilis dan jangan mengubahnya nanti.

Jalur ini tergantung pada platform yang Anda jalankan. Di bawah ini adalah jalur yang tercantum di situs web resmi. Ini dapat berubah tergantung pada versi Unity Anda, jadi pastikan untuk menjalankannya dan memeriksanya.

Simpan nilainya

Selama Anda memutuskan jalur tujuan, menulis dan membaca data dapat ditangani oleh pustaka standar .NET. Kali ini, kita menggabungkan data ke dalam satu kelas dan menulis string di JSON dan menulis string secara massal.

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

  // 省略
}

Isi tips sebelumnya didukung oleh .NET Standard Library, jadi saya rasa tidak ada yang sulit. Mari kita jalankan dulu dan simpan.

Jika Anda melihat lokasi jalur, Anda akan melihat bahwa file tersebut disimpan.

Saat Anda membuka file teks, Anda dapat melihat bahwa input Anda disimpan dalam format JSON.

Kami menggunakan kelas sehingga kami dapat File dengan mudah menulis file kali ini,StreamWriter tetapi tidak ada masalah jika kami menggunakan kelas lain seperti .

Mendapatkan nilai yang disimpan

Saya juga tidak berpikir itu sulit 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 dapat membaca teks yang disimpan dan membatalkan serialisasi string JSON dengan JsonUtility.FromJson metode untuk memulihkannya.

Coba jalankan game dan lihat bahwa bidang input diisi dengan mengklik tombol Muat dari kosong.

Ringkasan

Application.persistentDataPath Saya dapat membaca dan menulis data ke lokasi yang ditentukan menggunakan . Itu dapat disimpan sebagai file, sehingga juga memungkinkan untuk menyimpan data besar. Namun, data yang disimpan di jalur folder ini dapat disinkronkan di beberapa lingkungan, jadi Jika Anda berasumsi demikian, Anda harus mempertimbangkan apakah akan menyimpan file besar atau menyimpannya di lokasi lain.