将数据写入由持久数据路径指定的 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 格式保存。
我们正在使用一个类,以便这次可以轻松编写文件,File
StreamWriter
但是如果我们使用其他类(例如.
获取保存的值
我认为阅读也不难。
<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
我能够使用.
它可以保存为文件,因此也可以存储大量数据。
但是,存储在此文件夹路径中的数据可能会在多个环境中同步,因此
如果您假设这一点,则应考虑是保存大文件还是将其保存在其他位置。