Gravar dados no caminho de pasta recomendado do Unity especificado por persistentDataPath

Página atualizada :
Data de criação de página :

Ambiente de verificação

Windows
  • Janelas 11
Unity Editor
  • 2021.3.3f1
Pacote do sistema de entrada
  • 1.3.0

Pré-requisitos para esta dica

As configurações a seguir foram feitas com antecedência como premissa para a descrição desta dica.

Inicialmente

Nas dicas anteriores, PlayerPrefs usamos o método de salvar e carregar dados. No entanto, isso não é adequado para uso do ponto de vista de lidar com dados enormes e compartilhamento de dados.

Desta vez, vamos salvar e carregar dados para o diretório da pasta local. Basicamente, você pode especificar o local de escrita livremente, mas é mais vantajoso usar o especificado persistentDataPath em Unity, então desta vez usaremos isso.

Posicionamento e manipulação da interface do usuário

Para isso, usaremos a dica anterior "Ler e gravar dados usando o PlayerPrefs" como está, então Por favor, refira-o e implemente-o até o ponto em que você pode executar o processamento de botões.

Aliás, também vou colocar um lugar para mostrar o valor de ser usado persistentDataPath desta vez.

Verifique onde está o caminho da pasta para salvar o arquivo

Você pode obter o Application.persistentDataPath caminho da pasta dos dados a serem usados desta vez com o . Primeiro, vamos mostrar onde está o local.

Start Vamos criar um método para exibir um valor em um campo de texto.

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

  // 省略
}

Ao executá-lo, você deve ver o caminho na parte inferior.

Como estamos executando no Windows desta vez, o caminho se parece com este. Observe que o conteúdo do caminho pode mudar dependendo do usuário em execução e "CompanyName" ou "ProductName" nas configurações do projeto. Ao criar um jogo, decida sobre "CompanyName" e "ProductName" antes do jogo ser lançado e não o altere mais tarde.

Esse caminho depende da plataforma em que você está executando. Veja abaixo o caminho listado no site oficial. Ele pode mudar dependendo da sua versão do Unity, então certifique-se de executá-lo e verificá-lo.

Salve o valor

Contanto que você decida sobre o caminho de destino, a gravação e a leitura de dados podem ser manipuladas pela biblioteca padrão do .NET. Desta vez, estamos combinando os dados em uma classe e escrevendo cadeias de caracteres em JSON e escrevendo cadeias de caracteres em massa.

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

  // 省略
}

O conteúdo das dicas anteriores é suportado pela Biblioteca Padrão do .NET, portanto, não acho que haja nada particularmente difícil. Vamos executá-lo primeiro e salvá-lo.

Se você observar o local do caminho, verá que o arquivo foi salvo.

Quando você abre o arquivo de texto, você pode ver que sua entrada é salva no formato JSON.

Estamos usando uma classe para que possamos File facilmente escrever arquivos desta vez, mas não há problema se usarmos outras classes,StreamWriter como .

Obtenha um valor economizado

Também não acho difícil de ler.

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

Você pode ler o texto salvo e desserializar a cadeia de caracteres JSON com o JsonUtility.FromJson método para restaurá-la.

Tente executar o jogo e ver que o campo de entrada está preenchido clicando no botão Carregar de vazio.

Resumo

Application.persistentDataPath Consegui ler e gravar dados no local especificado usando o . Ele pode ser salvo como um arquivo, por isso também é possível armazenar dados enormes. No entanto, os dados armazenados nesse caminho de pasta podem ser sincronizados em vários ambientes, portanto, Se você assumir isso, você deve considerar se deseja salvar um arquivo grande ou salvá-lo em outro local.