نوشتن داده ها در مسیر پوشه توصیه شده Unity مشخص شده توسط persistentDataPath

صفحه به روز شده :
تاریخ ایجاد صفحه :

محیط تایید

ویندوز
  • ویندوز 11
ویرایشگر یونیتی
  • دانلود: 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;
  }

  // 省略
}

هنگامی که ان را اجرا می کنید، باید مسیر را در قسمت زیر ببینید.

از انجا که ما این بار بر روی ویندوز اجرا می کنیم، مسیر به این شکل است. لطفا توجه داشته باشید که محتویات مسیر ممکن است بسته به کاربر اجرا کننده و "نام شرکت" یا "نام محصول" در تنظیمات پروژه تغییر کند. هنگام ایجاد یک بازی، قبل از انتشار بازی در مورد "CompanyName" و "ProductName" تصمیم بگیرید و بعدا ان را تغییر ندهید.

این مسیر بستگی به پلت فرم شما در حال اجرا بر روی. در زیر مسیر ذکر شده در وب سایت رسمی است. ممکن است بسته به نسخه شما از Unity تغییر کند، بنابراین مطمئن شوید که ان را اجرا کنید و ان را بررسی کنید.

ذخیرۀ مقدار

تا زمانی که در مورد مسیر مقصد تصمیم می گیرید، نوشتن و خواندن داده ها می تواند توسط کتابخانه استاندارد دات نت انجام شود. این بار، ما داده ها را در یک کلاس ترکیب می کنیم و رشته ها را در 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("保存しました。");
  }

  // 省略
}

محتویات راهنمایی های قبلی توسط کتابخانه استاندارد دات نت پشتیبانی می شود، بنابراین من فکر نمی کنم چیزی به خصوص دشوار باشد. بیایید اول ان را اجرا کنیم و ان را ذخیره کنیم.

اگر به مکان مسیر نگاه کنید، خواهید دید که فایل ذخیره شده است.

هنگامی که فایل متنی را باز می کنید، می توانید ببینید که ورودی شما در فرمت 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 روش بازگرداندن ان deserialize کنید.

سعی کنید بازی را اجرا کنید و ببینید که فیلد ورودی با کلیک کردن بر روی بار از دکمه خالی پر شده است.

خلاصه

Application.persistentDataPath من قادر به خواندن و نوشتن داده ها به مکان مشخص شده با استفاده از بود. می توان ان را به عنوان یک فایل ذخیره کرد، بنابراین امکان ذخیره داده های بزرگ نیز وجود دارد. با این حال، داده های ذخیره شده در این مسیر پوشه ممکن است در محیط های مختلف هماهنگ شوند، بنابراین اگر فرض می کنید، باید در نظر بگیرید که ایا یک فایل بزرگ را ذخیره کنید یا ان را در مکان دیگری ذخیره کنید.