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