Adatok írása a Unity ajánlott mappaútvonalára a persistentDataPath által megadott

Oldal frissítve :
Oldal létrehozásának dátuma :

Ellenőrzési környezet

Windows
  • Windows 11 esetén
Unity-szerkesztő
  • 2021.3.3f1
Bemeneti rendszercsomag
  • 1.3.0

A tipp előfeltételei

A következő beállításokat előre elvégeztük a tipp leírásának előfeltételeként.

Először

Az előző tippekbenPlayerPrefs az adatok mentésének és betöltésének módszerét használtuk. Ez azonban nem alkalmas a hatalmas adatok kezelésére és az adatmegosztásra.

Ezúttal elmentjük és betöltjük az adatokat a helyi mappa könyvtárába. Alapvetően szabadon megadhatja az írás helyét, de előnyösebb a Unity-ben megadott persistentDataPath használata, így ezúttal ezt fogjuk használni.

Felhasználói felület elhelyezése és kezelése

Ehhez az előző tippet fogjuk használni: "Adatok olvasása és írása a PlayerPrefs használatával", így Kérjük, olvassa el ezt, és hajtsa végre addig a pontig, ahol elvégezheti a gombok feldolgozását.

Mellesleg elhelyezek egy helyet is, ahol megjelenítem az ezúttal használandó persistentDataPath értéket.

Ellenőrizze, hogy hol van a mappa elérési útja a fájl mentéséhez

Az ezúttal használni kívánt adatok mappa elérési útját a használatával kaphatja meg Application.persistentDataPath . Először mutassuk meg, hol van a hely.

Start Hozzunk létre egy metódust, amely megjelenít egy értéket egy szövegmezőben.

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

  // 省略
}

Amikor futtatja, látnia kell az elérési utat az alján.

Mivel ezúttal Windows rendszeren futunk, az elérési út így néz ki. Kérjük, vegye figyelembe, hogy az elérési út tartalma a végrehajtó felhasználótól és a projektbeállításokban szereplő "CompanyName" vagy "ProductName" függvényében változhat. Játék létrehozásakor a játék megjelenése előtt döntse el a "CompanyName" és a "ProductName" elemeket, és később ne módosítsa azt.

Ez az elérési út attól függ, hogy milyen platformon fut. Az alábbiakban a hivatalos weboldalon felsorolt útvonal található. Ez a Unity verziójától függően változhat, ezért feltétlenül futtassa és nézze meg.

Az érték mentése

Ha Ön dönt a célútvonalról, az írási és olvasási adatokat a .NET szabványos könyvtára kezelheti. Ezúttal az adatokat egy osztályba egyesítjük, és sztringeket írunk JSON-ban, és tömegesen írunk sztringeket.

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

  // 省略
}

Az előző tippek tartalmát a .NET Standard Library támogatja, így nem hiszem, hogy bármi különösebben nehéz. Először futtassuk, és mentsük el.

Ha megnézi az elérési utat, látni fogja, hogy a fájl mentésre kerül.

A szövegfájl megnyitásakor láthatja, hogy a bemenet JSON formátumban van mentve.

Egy osztályt használunk, hogy ezúttal könnyen írhassunk File fájlokat, de nincs probléma, ha más osztályokat használunk,StreamWriter például .

Mentett érték lekérése

Szerintem sem nehéz olvasni.

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

Elolvashatja a mentett szöveget, és deszerializálhatja a JSON-sztringet a JsonUtility.FromJson visszaállítási módszerrel.

Próbálja meg futtatni a játékot, és nézze meg, hogy a beviteli mező ki van-e töltve a Betöltés üresből gombra kattintva.

Összefoglalás

Application.persistentDataPath Tudtam olvasni és írni az adatokat a megadott helyre a használatával. Fájlként menthető, így hatalmas adatok tárolására is lehetőség van. Előfordulhat azonban, hogy az ezen a mappaútvonalon tárolt adatok több környezetben is szinkronizálhatók, így Ha ezt feltételezi, fontolja meg, hogy nagy fájlt mentsen-e, vagy más helyre mentse.