Kirjoita tiedot Unityn suosittelemaan kansiopolkuun, jonka persistentDataPath määrittää

Sivu päivitetty :
Sivun luontipäivämäärä :

Varmennusympäristö

Windows
  • Windows 11
Unity-editori
  • 2021.3.3F1
Syöttöjärjestelmän paketti
  • 1.3.0

Tämän vinkin edellytykset

Seuraavat asetukset on tehty etukäteen tämän vinkin kuvauksen lähtökohtana.

Alun perin

Edellisissä vinkeissäPlayerPrefs käytimme tietojen tallennus- ja latausmenetelmää. Tämä ei kuitenkaan sovellu käytettäväksi valtavan datan käsittelyn ja datan jakamisen näkökulmasta.

Tällä kertaa tallennamme ja lataamme tiedot paikalliseen kansiohakemistoon. Periaatteessa voit määrittää kirjoituspaikan vapaasti, mutta on edullisempaa käyttää Unityssa määritettyä persistentDataPath , joten tällä kertaa käytämme tätä.

Käyttöliittymän sijoittelu ja käsittely

Tätä varten käytämme edellistä vinkkiä "Lue ja kirjoita tietoja PlayerPrefsin avulla" sellaisenaan, joten Katso se ja toteuta se siihen pisteeseen, jossa voit suorittaa painikkeiden käsittelyn.

Laitan muuten myös paikan, jossa voin näyttää arvon käytettäväksi persistentDataPath tällä kertaa.

Tarkista, missä kansiopolku on tiedoston tallentamista varten

Voit saada Application.persistentDataPath tällä kertaa käytettävien tietojen kansiopolun . Näytetään ensin, missä sijainti on.

Start Luodaan menetelmä arvon näyttämiseksi tekstikentässä.

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

  // 省略
}

Kun suoritat sen, sinun pitäisi nähdä polku alapuolella.

Koska olemme tällä kertaa Windowsissa, polku näyttää tältä. Huomaa, että polun sisältö voi muuttua suorittavan käyttäjän ja projektin asetusten "CompanyName" tai "ProductName" mukaan. Kun luot peliä, päätä "CompanyName" ja "ProductName" ennen pelin julkaisemista äläkä muuta sitä myöhemmin.

Tämä polku riippuu alustasta, jolla käytät. Alla on polku, joka on lueteltu virallisella verkkosivustolla. Se voi muuttua Unityn version mukaan, joten muista suorittaa se ja tarkistaa se.

Tallenna arvo

Niin kauan kuin päätät kohdepolun, .NET-standardikirjasto voi käsitellä tietojen kirjoittamista ja lukemista. Tällä kertaa yhdistämme tiedot yhdeksi luokaksi ja kirjoitamme merkkijonoja JSONissa ja kirjoitamme merkkijonoja irtotavarana.

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-standardikirjasto tukee edellisten vinkkien sisältöä, joten en usko, että mitään erityisen vaikeaa on. Suoritetaan se ensin ja tallennetaan se.

Jos tarkastelet polun sijaintia, näet, että tiedosto on tallennettu.

Kun avaat tekstitiedoston, näet, että syötteesi on tallennettu JSON-muodossa.

Käytämme luokkaa, jotta voimme File helposti kirjoittaa tiedostoja tällä kertaa, mutta ei ole mitään ongelmaa, jos käytämme muita luokkia,StreamWriter kuten .

Hanki tallennettu arvo

En usko, että sitä on myöskään vaikea lukea.

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

Voit lukea tallennetun tekstin ja poistaa JSON-merkkijonon JsonUtility.FromJson sarjoituksen palautusmenetelmällä.

Yritä suorittaa peli ja tarkistaa, että syöttökenttä on täytetty, napsauttamalla Lataa tyhjästä -painiketta.

Yhteenveto

Application.persistentDataPath Pystyin lukemaan ja kirjoittamaan tietoja määritettyyn sijaintiin käyttämällä . Se voidaan tallentaa tiedostona, joten on myös mahdollista tallentaa valtavia tietoja. Tähän kansiopolkuun tallennetut tiedot voidaan kuitenkin synkronoida useissa ympäristöissä, joten Jos oletat tämän, sinun kannattaa harkita, tallennetaanko suuri tiedosto vai tallennetaanko se toiseen sijaintiin.