Įrašykite duomenis į "Unity" rekomenduojamą aplanko kelią, nurodytą persistentDataPath

Puslapis atnaujintas :
Puslapio sukūrimo data :

Tikrinimo aplinka

Windows
  • Langai 11
"Unity" redaktorius
  • 2021.3.3F1
Įvesties sistemos paketas
  • 1.3.0

Būtinos šio patarimo sąlygos

Šie nustatymai buvo atlikti iš anksto kaip šio patarimo aprašymo prielaida.

Iš pradžių

Ankstesniuose patarimuosePlayerPrefs naudojome duomenų išsaugojimo ir įkėlimo metodą. Tačiau tai nėra tinkama naudoti didelių duomenų tvarkymo ir dalijimosi duomenimis požiūriu.

Šį kartą išsaugosime ir įkelsime duomenis į vietinio aplanko katalogą. Iš esmės rašymo vietą galite nurodyti laisvai, tačiau naudingiau naudoti nurodytą persistentDataPath "Unity", todėl šį kartą tai naudosime.

UI išdėstymas ir tvarkymas

Tam naudosime ankstesnį patarimą "Skaityti ir rašyti duomenis naudojant" PlayerPrefs ", koks jis yra, taigi Peržiūrėkite tai ir įgyvendinkite jį tiek, kad galėtumėte atlikti mygtukų apdorojimą.

Beje, aš taip pat pastatysiu vietą, kurioje bus rodoma vertė, kuri bus naudojama persistentDataPath šį kartą.

Patikrinkite, kur yra aplanko kelias failui išsaugoti

Šį kartą naudojamų duomenų aplanko Application.persistentDataPath kelią galite gauti naudodami . Pirmiausia parodykime, kur yra vieta.

Start Sukurkime metodą, kaip rodyti reikšmę teksto lauke.

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

  // 省略
}

Kai jį paleisite, turėtumėte pamatyti kelią apačioje.

Kadangi šį kartą veikiame "Windows", kelias atrodo taip. Atkreipkite dėmesį, kad kelio turinys gali keistis priklausomai nuo vykdančiojo vartotojo ir "Įmonės pavadinimas" arba "Produkto pavadinimas" projekto nustatymuose. Kurdami žaidimą, nuspręskite dėl "CompanyName" ir "ProductName" prieš išleidžiant žaidimą ir vėliau jo nekeiskite.

Šis kelias priklauso nuo platformos, kurioje veikiate. Žemiau yra kelias, nurodytas oficialioje svetainėje. Jis gali keistis priklausomai nuo jūsų "Unity" versijos, todėl būtinai paleiskite ją ir patikrinkite.

Išsaugokite vertę

Kol nuspręsite dėl paskirties kelio, duomenų rašymą ir skaitymą gali tvarkyti .NET standartinė biblioteka. Šį kartą mes sujungiame duomenis į vieną klasę ir rašome eilutes JSON ir rašome eilutes masiškai.

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("保存しました。");
  }

  // 省略
}

Ankstesnių patarimų turinį palaiko .NET standartinė biblioteka, todėl nemanau, kad yra kažkas ypač sudėtingo. Pirmiausia paleiskime jį ir išsaugokime.

Jei pažvelgsite į kelio vietą, pamatysite, kad failas išsaugotas.

Kai atidarote tekstinį failą, matote, kad jūsų įvestis išsaugota JSON formatu.

Mes naudojame klasę, kad šį kartą galėtume File lengvai rašyti failus, tačiau nėra jokių problemų, jei naudosime kitas klases,StreamWriter tokias kaip .

Gaukite sutaupytą vertę

Nemanau, kad ir sunku skaityti.

/// <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("読み込みました。");
}

Galite perskaityti išsaugotą tekstą ir deserializuoti JSON eilutę naudodami metodą, JsonUtility.FromJson kaip jį atkurti.

Pabandykite paleisti žaidimą ir pamatyti, kad įvesties laukas užpildytas spustelėję mygtuką Įkelti iš tuščio.

Suvestinė

Application.persistentDataPath Galėjau skaityti ir rašyti duomenis į nurodytą vietą naudodamas . Jis gali būti išsaugotas kaip failas, todėl taip pat galima saugoti didžiulius duomenis. Tačiau šiame aplanko kelyje saugomi duomenys gali būti sinchronizuojami keliose aplinkose, todėl Jei manote, kad taip, turėtumėte apsvarstyti, ar įrašyti didelį failą, ar išsaugoti jį kitoje vietoje.