כתיבת נתונים לנתיב התיקיה המומלץ של Unity שצוין על-ידי persistentDataPath

עודכן דף :
תאריך יצירת דף :

סביבת אימות

חלונות
  • חלונות 11
עורך Unity
  • 2021.3.3F1
חבילת מערכת קלט
  • 1.3.0

תנאים מוקדמים לטיפ זה

ההגדרות הבאות נקבעו מראש כהנחת יסוד לתיאור עצה זו.

בהתחלה

בטיפים PlayerPrefs הקודמים השתמשנו בשיטה של שמירה וטעינה של נתונים. עם זאת, זה לא מתאים לשימוש מנקודת מבט של טיפול בנתונים עצומים ושיתוף נתונים.

הפעם, נשמור ונטען נתונים לספריית התיקיות המקומיות. בעיקרון, אתה יכול לציין את מיקום הכתיבה באופן חופשי, אבל זה יתרון יותר להשתמש שצוין persistentDataPath באחדות, אז הפעם נשתמש בזה.

מיקום וטיפול בממשק משתמש

לשם כך, נשתמש בטיפ הקודם "קרא וכתוב נתונים באמצעות 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, הנתיב נראה כך. שים לב שתוכן הנתיב עשוי להשתנות בהתאם למשתמש המבצע ול- "CompanyName" או "ProductName" בהגדרות הפרויקט. בעת יצירת משחק, החלט על "CompanyName" ו- "ProductName" לפני שחרור המשחק ואל תשנה אותו מאוחר יותר.

נתיב זה תלוי בפלטפורמה שבה אתה פועל. להלן הנתיב המופיע באתר הרשמי. היא עשויה להשתנות בהתאם לגרסת 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("読み込みました。");
}

באפשרותך לקרוא את הטקסט שנשמר ולבטל את הסידרה של מחרוזת JSON באמצעות JsonUtility.FromJson השיטה לשחזורו.

נסה להפעיל את המשחק ולראות ששדה הקלט מאוכלס על-ידי לחיצה על לחצן טען מריק.

תקציר

Application.persistentDataPath הצלחתי לקרוא ולכתוב נתונים למיקום שצוין באמצעות . זה יכול להישמר כקובץ, ולכן אפשר גם לאחסן נתונים ענקיים. עם זאת, נתונים המאוחסנים בנתיב תיקיה זה עשויים להיות מסונכרנים בסביבות מרובות, ולכן אם אתה מניח זאת, עליך לשקול אם לשמור קובץ גדול או לשמור אותו במיקום אחר.