เขียนข้อมูลไปยังเส้นทางโฟลเดอร์ที่แนะนําของ Unity ที่ระบุโดย persistentDataPath

ปรับปรุงหน้า :
วันที่สร้างเพจ :

สภาพแวดล้อมการตรวจสอบ

หน้าต่าง
  • หน้าต่าง 11
บรรณาธิการ Unity
  • ปี 2021.3.3f1
แพ็คเกจระบบอินพุต
  • 1.3.0

ข้อกําหนดเบื้องต้นสําหรับเคล็ดลับนี้

การตั้งค่าต่อไปนี้ได้ทําไว้ล่วงหน้าเพื่อเป็นหลักฐานสําหรับคําอธิบายของเคล็ดลับนี้

ทีแรก

ในเคล็ดลับPlayerPrefsก่อนหน้านี้เราใช้วิธีการบันทึกและโหลดข้อมูล อย่างไรก็ตามสิ่งนี้ไม่เหมาะสําหรับการใช้งานจากมุมมองของการจัดการข้อมูลขนาดใหญ่และการแบ่งปันข้อมูล

คราวนี้เราจะบันทึกและโหลดข้อมูลลงในไดเร็กทอรีโฟลเดอร์ในเครื่อง โดยทั่วไปคุณสามารถระบุตําแหน่งการเขียนได้อย่างอิสระ แต่การใช้ที่ระบุไว้ใน persistentDataPath Unity จะเป็นประโยชน์มากกว่าดังนั้นคราวนี้เราจะใช้สิ่งนี้

การจัดวางและการจัดการ 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 Standard Library ดังนั้นฉันไม่คิดว่ามีอะไรที่ยากเป็นพิเศษ ลองเรียกใช้ก่อนและบันทึกไว้

หากคุณดูตําแหน่งเส้นทางคุณจะเห็นว่าไฟล์ถูกบันทึกไว้

เมื่อคุณเปิดไฟล์ข้อความคุณจะเห็นว่าข้อมูลของคุณถูกบันทึกในรูปแบบ 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("読み込みました。");
}

คุณสามารถอ่านข้อความที่บันทึกไว้และ deserialize สตริง JSON ด้วย JsonUtility.FromJson วิธีการกู้คืน

ลองรันเกมและเห็นว่าช่องป้อนข้อมูลถูกเติมโดยคลิกปุ่มโหลดจากที่ว่างเปล่า

สรุป

Application.persistentDataPath ฉันสามารถอ่านและเขียนข้อมูลไปยังตําแหน่งที่ระบุโดยใช้ . สามารถบันทึกเป็นไฟล์ได้ดังนั้นจึงสามารถจัดเก็บข้อมูลขนาดใหญ่ได้ อย่างไรก็ตาม ข้อมูลที่เก็บไว้ในเส้นทางโฟลเดอร์นี้อาจถูกซิงโครไนซ์ในหลายสภาพแวดล้อม ดังนั้น หากคุณสันนิษฐานว่าคุณควรพิจารณาว่าจะบันทึกไฟล์ขนาดใหญ่หรือบันทึกในตําแหน่งอื่น