將數據寫入由持久數據路徑指定的 Unity 推薦資料夾路徑

更新頁 :
頁面創建日期 :

驗證環境

窗戶
  • 視窗 11
統一編輯器
  • 2021.3.3f1
輸入系統包
  • 1.3.0

此提示的先決條件

作為此提示描述的前提,已預先進行了以下設置。

起先

前面的提示中,PlayerPrefs我們使用了保存和載入數據的方法。 但是,從處理海量數據和數據共用的角度來看,這並不適合使用。

這一次,我們將保存數據並將其載入到本地資料夾目錄。 基本上,您可以自由指定寫入位置,但是在Unity中使用指定的 persistentDataPath 位置更有利,因此這次我們將使用它。

UI 放置和處理

為此,我們將按原樣使用前面的提示“使用 PlayerPrefs 讀取和寫入數據”,因此 請參考該內容並將其實現到可以執行按鈕處理的程度。

順便說一下,我還會放置一個地方來顯示這次要使用的 persistentDataPath 值。

檢查資料夾路徑以儲存檔案的位置

您可以取得 Application.persistentDataPath 這次要使用的資料夾路徑。 首先,讓我們顯示位置在哪裡。

Start 讓我們創建一個在文字欄位中顯示值的方法。

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

  // 省略
}

運行它時,您應該看到底部的路徑。

由於我們這次在 Windows 上運行,因此路徑如下所示。 請注意,路徑的內容可能會根據執行使用者和項目設置中的「公司名稱」或「產品名稱」而變化。 創建遊戲時,請在遊戲發佈前確定「公司名稱」和「產品名稱」,以後不要更改。

此路徑取決於您正在運行的平臺。 以下是官方網站上列出的路徑。 它可能會根據您的 Unity 版本而更改,因此請務必運行它並檢查它。

保存值

只要確定目標路徑,.NET 標準庫就可以處理數據的寫入和讀取。 這一次,我們將數據合併到一個類中,並在 JSON 中寫入字串並批量寫入字串。

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

  // 省略
}

.NET 標準庫支援前面提示的內容,因此我認為沒有什麼特別困難的。 讓我們先運行它並保存它。

如果您查看路徑位置,您將看到檔已保存。

打開文字檔時,可以看到輸入以 JSON 格式保存。

我們正在使用一個類,以便這次可以輕鬆編寫檔,FileStreamWriter但是如果我們使用其他類(例如.

獲取保存的值

我認為閱讀也不難。

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

您可以讀取儲存的文字並使用還原它的方法反 JsonUtility.FromJson 序列化 JSON 字串。

嘗試運行遊戲,並通過按兩下從空載入按鈕來查看輸入欄位是否已填充。

總結

Application.persistentDataPath 我能夠使用. 它可以保存為檔,因此也可以存儲大量數據。 但是,存儲在此資料夾路徑中的數據可能會在多個環境中同步,因此 如果您假設這一點,則應考慮是保存大文件還是將其保存在其他位置。