Zápis dat do doporučené cesty ke složce Unity určené pomocí persistentDataPath

Stránky aktualizovány :
Datum vytvoření stránky :

Ověřovací prostředí

Windows
  • Systém Windows 11
Editor jednoty
  • 2021.3.3f1
Vstupní systémový balíček
  • 1.3.0

Předpoklady pro tento tip

Následující nastavení byla provedena předem jako předpoklad pro popis tohoto tipu.

Nejprve

V předchozích tipechPlayerPrefs jsme použili metodu ukládání a načítání dat. To však není vhodné pro použití z hlediska manipulace s obrovskými daty a jejich sdílení.

Tentokrát uložíme a načteme data do adresáře místních složek. V zásadě můžete určit místo psaní volně, ale je výhodnější použít specifikované persistentDataPath v Unity, takže tentokrát použijeme toto.

Umístění a zpracování uživatelského rozhraní

K tomu použijeme předchozí tip "Číst a zapisovat data pomocí PlayerPrefs" tak, jak je, takže Prosím, podívejte se na to a implementujte to do bodu, kdy můžete provádět zpracování tlačítek.

Mimochodem, umístím také místo, kde se zobrazí hodnota, která bude persistentDataPath použita tentokrát.

Zkontrolujte, kde je cesta ke složce pro uložení souboru

Můžete získat Application.persistentDataPath cestu ke složce dat, která mají být použita tentokrát s programem . Nejprve ukažme, kde je umístění.

Start Pojďme vytvořit metodu pro zobrazení hodnoty v textovém poli.

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

  // 省略
}

Když jej spustíte, měli byste vidět cestu na spodní straně.

Vzhledem k tomu, že tentokrát běžíme na Windows, cesta vypadá takto. Vezměte prosím na vědomí, že obsah cesty se může změnit v závislosti na vykonávajícím uživateli a "CompanyName" nebo "ProductName" v nastavení projektu. Při vytváření hry se rozhodněte o "CompanyName" a "ProductName" před vydáním hry a neměňte je později.

Tato cesta závisí na platformě, na které běžíte. Níže je uvedena cesta uvedená na oficiálních stránkách. Může se změnit v závislosti na vaší verzi Unity, takže ji nezapomeňte spustit a zkontrolovat.

Uložte hodnotu

Pokud se rozhodnete pro cílovou cestu, zápis a čtení dat může zpracovávat standardní knihovna .NET. Tentokrát kombinujeme data do jedné třídy a zapisujeme řetězce ve formátu JSON a zapisujeme řetězce hromadně.

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

  // 省略
}

Obsah předchozích tipů je podporován standardní knihovnou .NET, takže si nemyslím, že je něco zvlášť obtížného. Pojďme to nejprve spustit a uložit.

Pokud se podíváte na umístění cesty, uvidíte, že soubor je uložen.

Když otevřete textový soubor, uvidíte, že váš vstup je uložen ve formátu JSON.

Používáme třídu, abychom tentokrát mohli File snadno psát soubory, ale není problém, pokud použijeme jiné třídy,StreamWriter jako je .

Získání uložené hodnoty

Nemyslím si, že je těžké to číst.

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

Můžete si přečíst uložený text a deserializovat řetězec JSON pomocí JsonUtility.FromJson metody pro jeho obnovení.

Zkuste spustit hru a zjistit, zda je vstupní pole vyplněno, kliknutím na tlačítko Načíst z prázdného místa.

Shrnutí

Application.persistentDataPath Byl jsem schopen číst a zapisovat data do zadaného umístění pomocí . Lze jej uložit jako soubor, takže je také možné ukládat obrovská data. Data uložená v této cestě ke složce však mohou být synchronizována ve více prostředích, takže Pokud předpokládáte, měli byste zvážit, zda uložit velký soubor nebo jej uložit do jiného umístění.