PersistentDataPath द्वारा निर्दिष्ट एकता के अनुशंसित फ़ोल्डर पथ पर डेटा लिखें

पेज अद्यतन :
पेज निर्माण की तारीख :

सत्यापन वातावरण

विंडोज़
  • विंडोज 11
एकता संपादक
  • 2021.3.3f1
इनपुट सिस्टम पैकेज
  • 1.3.0

इस टिप के लिए आवश्यक शर्तें

इस टिप के विवरण के लिए एक आधार के रूप में निम्नलिखित सेटिंग्स पहले से बनाई गई हैं।

पहले

पिछले सुझावों में , PlayerPrefs हमने डेटा को सहेजने और लोड करने की विधि का उपयोग किया। हालांकि, यह विशाल डेटा और डेटा साझाकरण को संभालने के दृष्टिकोण से उपयोग के लिए उपयुक्त नहीं है।

इस बार, हम स्थानीय फ़ोल्डर निर्देशिका में डेटा सहेजेंगे और लोड करेंगे। मूल रूप से, आप लेखन स्थान को स्वतंत्र रूप से निर्दिष्ट कर सकते हैं, लेकिन यूनिटी में निर्दिष्ट persistentDataPath का उपयोग करना अधिक फायदेमंद है, इसलिए इस बार हम इसका उपयोग करेंगे।

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

  // 省略
}

जब आप इसे चलाते हैं, तो आपको नीचे की ओर का रास्ता देखना चाहिए।

चूंकि हम इस बार विंडोज पर चल रहे हैं, इसलिए पथ इस तरह दिखता है। कृपया ध्यान दें कि प्रोजेक्ट सेटिंग्स में निष्पादित उपयोगकर्ता और "कंपनी नाम" या "उत्पाद नाम" के आधार पर पथ की सामग्री बदल सकती है। गेम बनाते समय, गेम जारी होने से पहले "कंपनी नाम" और "उत्पाद नाम" पर निर्णय लें और बाद में इसे न बदलें।

यह पथ उस प्लेटफ़ॉर्म पर निर्भर करता है जिस पर आप चल रहे हैं। नीचे आधिकारिक वेबसाइट पर सूचीबद्ध पथ है। यह एकता के आपके संस्करण के आधार पर बदल सकता है, इसलिए इसे चलाना और इसे देखना सुनिश्चित करें।

मान सहेजें

जब तक आप गंतव्य पथ पर निर्णय लेते हैं, तब तक डेटा लिखना और पढ़ना .NET मानक लाइब्रेरी द्वारा नियंत्रित किया जा सकता है। इस बार, हम डेटा को एक कक्षा में जोड़ रहे हैं और जेएसओएन में स्ट्रिंग्स लिख रहे हैं और थोक में स्ट्रिंग्स लिख रहे हैं।

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 मानक लाइब्रेरी द्वारा समर्थित हैं, इसलिए मुझे नहीं लगता कि कुछ भी विशेष रूप से मुश्किल है। चलो पहले इसे चलाते हैं और इसे सहेजते हैं।

यदि आप पथ स्थान देखते हैं, तो आप देखेंगे कि फ़ाइल सहेजी गई है।

जब आप पाठ फ़ाइल खोलते हैं, तो आप देख सकते हैं कि आपका इनपुट 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 मैं निर्दिष्ट स्थान पर डेटा पढ़ने और लिखने में सक्षम था। इसे एक फ़ाइल के रूप में सहेजा जा सकता है, इसलिए विशाल डेटा को संग्रहीत करना भी संभव है। हालाँकि, इस फ़ोल्डर पथ में संग्रहीत डेटा एकाधिक परिवेशों में सिंक्रनाइज़ किया जा सकता है, इसलिए यदि आप मानते हैं कि, आपको विचार करना चाहिए कि क्या एक बड़ी फ़ाइल को सहेजना है या इसे किसी अन्य स्थान पर सहेजना है।