Ghi dữ liệu vào đường dẫn thư mục được đề xuất của Unity được chỉ định bởi persistentDataPath

Trang Cập Nhật :
Ngày tạo trang :

Môi trường xác minh

Windows
  • cửa sổ 11
Biên tập viên Unity
  • 2021.3.3F1
Gói hệ thống đầu vào
  • 1.3.0

Điều kiện tiên quyết cho mẹo này

Các cài đặt sau đây đã được thực hiện trước làm tiền đề cho mô tả về mẹo này.

Lúc đầu

Trong các mẹo trước, PlayerPrefs chúng tôi đã sử dụng phương pháp lưu và tải dữ liệu. Tuy nhiên, điều này không phù hợp để sử dụng từ quan điểm xử lý dữ liệu khổng lồ và chia sẻ dữ liệu.

Lần này, chúng ta sẽ lưu và tải dữ liệu vào thư mục thư mục cục bộ. Về cơ bản, bạn có thể chỉ định vị trí viết một cách tự do, nhưng sẽ thuận lợi hơn khi sử dụng chỉ định persistentDataPath trong Unity, vì vậy lần này chúng tôi sẽ sử dụng điều này.

Vị trí và xử lý giao diện người dùng

Đối với điều này, chúng tôi sẽ sử dụng mẹo trước "Đọc và ghi dữ liệu bằng PlayerPrefs" như hiện tại, vì vậy Vui lòng tham khảo điều đó và triển khai nó đến mức bạn có thể thực hiện xử lý nút.

Ngẫu nhiên, tôi cũng sẽ đặt một nơi để hiển thị giá trị sẽ được sử dụng persistentDataPath lần này.

Kiểm tra vị trí đường dẫn thư mục để lưu tệp

Bạn có thể lấy Application.persistentDataPath đường dẫn thư mục của dữ liệu sẽ được sử dụng lần này với . Đầu tiên, hãy hiển thị vị trí ở đâu.

Start Hãy tạo một phương thức để hiển thị một giá trị trong một trường văn bản.

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

  // 省略
}

Khi bạn chạy nó, bạn sẽ thấy đường dẫn ở mặt dưới.

Vì chúng tôi đang chạy trên Windows lần này, đường dẫn trông như thế này. Xin lưu ý rằng nội dung của đường dẫn có thể thay đổi tùy thuộc vào người dùng thực thi và "Tên công ty" hoặc "Tên sản phẩm" trong cài đặt dự án. Khi tạo trò chơi, hãy quyết định "Tên công ty" và "Tên sản phẩm" trước khi trò chơi được phát hành và không thay đổi nó sau này.

Đường dẫn này phụ thuộc vào nền tảng bạn đang chạy. Dưới đây là đường dẫn được liệt kê trên trang web chính thức. Nó có thể thay đổi tùy thuộc vào phiên bản Unity của bạn, vì vậy hãy nhớ chạy nó và kiểm tra.

Lưu giá trị

Miễn là bạn quyết định đường dẫn đích, việc ghi và đọc dữ liệu có thể được xử lý bởi thư viện chuẩn .NET. Lần này, chúng ta đang kết hợp dữ liệu thành một lớp và viết chuỗi bằng JSON và viết chuỗi hàng loạt.

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

  // 省略
}

Nội dung của các mẹo trước được hỗ trợ bởi .NET Standard Library, vì vậy tôi không nghĩ rằng có bất cứ điều gì đặc biệt khó khăn. Hãy chạy nó trước và lưu nó.

Nếu bạn nhìn vào vị trí đường dẫn, bạn sẽ thấy rằng tệp đã được lưu.

Khi bạn mở tệp văn bản, bạn có thể thấy rằng đầu vào của bạn được lưu ở định dạng JSON.

Chúng tôi đang sử dụng một lớp để chúng tôi có thể dễ dàng viết tệp lần này,StreamWriter nhưng không có File vấn đề gì nếu chúng tôi sử dụng các lớp khác như .

Nhận giá trị đã lưu

Tôi cũng không nghĩ nó khó đọc.

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

Bạn có thể đọc văn bản đã lưu và deserialize chuỗi JSON với phương JsonUtility.FromJson pháp để khôi phục nó.

Hãy thử chạy trò chơi và thấy rằng trường nhập được điền bằng cách nhấp vào Tải từ nút trống.

Tóm tắt

Application.persistentDataPath Tôi đã có thể đọc và ghi dữ liệu vào vị trí được chỉ định bằng cách sử dụng . Nó có thể được lưu dưới dạng tệp, vì vậy cũng có thể lưu trữ dữ liệu khổng lồ. Tuy nhiên, dữ liệu được lưu trữ trong đường dẫn thư mục này có thể được đồng bộ hóa trong nhiều môi trường, vì vậy Nếu bạn giả định như vậy, bạn nên xem xét nên lưu một tệp lớn hay lưu nó ở một vị trí khác.