Kirjutage andmed Unity soovitatud kaustateele, mille on määranud persistentDataPath

Lehekülg uuendatud :
Lehe loomise kuupäev :

Kontrollimise keskkond

Windows
  • Windows 11
Ühtsuse toimetaja
  • 2021.3.3f1
Sisendsüsteemi pakett
  • 1.3.0

Selle näpunäite eeltingimused

Selle vihje kirjeldamise eelduseks on eelnevalt tehtud järgmised sätted.

Alguses

Eelmistes nõuandetesPlayerPrefs kasutasime andmete salvestamise ja laadimise meetodit. Kuid see ei sobi kasutamiseks tohutute andmete käitlemise ja andmete jagamise seisukohast.

Seekord salvestame ja laadime andmed kohaliku kausta kataloogi. Põhimõtteliselt saate kirjutamiskoha vabalt määrata, kuid soodsam on kasutada Unitys määratud persistentDataPath asukohta, nii et seekord kasutame seda.

Kasutajaliidese paigutamine ja käitlemine

Selleks kasutame eelmist näpunäidet "Lugege ja kirjutage andmeid PlayerPrefs'i abil", nagu see on, nii et Palun vaadake seda ja rakendage see punktini, kus saate nuppe töödelda.

Muuseas, panen ka koha, kus näidata seekord kasutatava persistentDataPath väärtust.

Kontrollige, kus on faili salvestamiseks kausta tee

Saate vaadata Application.persistentDataPath nende andmete kaustateed, mida seekord kasutada operatsioonisüsteemiga . Esiteks näitame, kus asukoht on.

Start Loome meetodi väärtuse kuvamiseks tekstiväljal.

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

  // 省略
}

Kui te seda käivitate, peaksite nägema teed alumisel küljel.

Kuna seekord töötab Windowsis, näeb tee välja selline. Pange tähele, et tee sisu võib muutuda sõltuvalt käivitavast kasutajast ja projekti seadetes "Ettevõtte nimi" või "Tootenimi". Mängu loomisel otsustage enne mängu vabastamist "Ettevõtte nimi" ja "Tootenimi" ning ärge seda hiljem muutke.

See tee sõltub platvormist, millel töötate. Allpool on ametlikul veebisaidil loetletud tee. See võib muutuda sõltuvalt teie Unity versioonist, nii et käivitage see kindlasti ja kontrollige seda.

Salvestage väärtus

Niikaua kui otsustate sihtkoha marsruudi, saab kirjutamise ja lugemise andmeid käsitleda .NET standardteegis. Seekord ühendame andmed ühte klassi ja kirjutame JSON-is stringe ning kirjutame stringe hulgi.

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

  // 省略
}

Eelmiste näpunäidete sisu toetab .NET Standard Library, nii et ma ei usu, et seal on midagi eriti rasket. Käivitame selle kõigepealt ja salvestame selle.

Kui vaatate tee asukohta, näete, et fail on salvestatud.

Tekstifaili avamisel näete, et teie sisend on salvestatud JSON-vormingus.

Kasutame klassi, et saaksime File seekord hõlpsalt faile kirjutada, kuid pole probleemi, kui kasutame teisi klasse,StreamWriter näiteks .

Hankige salvestatud väärtus

Ma ei usu, et seda on ka raske lugeda.

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

Salvestatud teksti saate lugeda ja JSON-stringi deserialiseerida selle taastamise meetodiga JsonUtility.FromJson .

Proovige mängu käivitada ja näha, et sisendväli on täidetud, klõpsates nuppu Laadi tühjast.

Kokkuvõte

Application.persistentDataPath Suutsin lugeda ja kirjutada andmeid määratud asukohta, kasutades . Seda saab salvestada failina, seega on võimalik salvestada ka tohutuid andmeid. Sellele kaustateele salvestatud andmeid võib siiski sünkroonida mitmes keskkonnas, nii et Kui eeldate seda, peaksite kaaluma, kas salvestada suur fail või salvestada see teise asukohta.