将数据写入由持久数据路径指定的 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 我能够使用. 它可以保存为文件,因此也可以存储大量数据。 但是,存储在此文件夹路径中的数据可能会在多个环境中同步,因此 如果您假设这一点,则应考虑是保存大文件还是将其保存在其他位置。