persistentDataPath로 지정된 Unity의 권장 폴더 경로에 데이터를 씁니다.
검증 환경
- 윈도우
-
- 윈도우 11
- Unity 에디터
-
- 2021.3.3f1
- 입력 시스템 패키지
-
- 1.3.0
이 팁의 전제 조건
이 팁에 대한 설명의 전제로 다음 설정이 미리 이루어졌습니다.
처음에
이전 팁PlayerPrefs
에서는 데이터를 저장하고로드하는 방법을 사용했습니다.
그러나 이것은 대용량 데이터 처리 및 데이터 공유의 관점에서 사용하기에 적합하지 않습니다.
이번에는 로컬 폴더 디렉토리에 데이터를 저장하고 로드합니다.
기본적으로 쓰기 위치를 자유롭게 지정할 수 있지만 Unity에서 지정한 persistentDataPath
것을 사용하는 것이 더 유리하므로 이번에는 이것을 사용합니다.
UI 배치 및 처리
이를 위해 이전 팁 "PlayerPrefs를 사용하여 데이터 읽기 및 쓰기"를 그대로 사용하므로 그것을 참고해, 버튼 처리를 할 수 있는 지점까지 구현해 주세요.
덧붙여서, 이번에 사용하는 persistentDataPath
값을 표시하는 장소도 배치합니다.
파일을 저장할 폴더 경로가 어디에 있는지 확인하십시오.
이번에 Application.persistentDataPath
사용할 데이터의 폴더 경로를 에서 가져올 수 있습니다. 먼저 위치가 어디에 있는지 보여 드리겠습니다.
Start
텍스트 필드에 값을 표시하는 메서드를 만들어 보겠습니다.
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;
}
// 省略
}
실행하면 밑면에 경로가 표시되어야 합니다.
이번에는 Windows에서 실행 중이므로 경로는 다음과 같습니다. 경로의 내용은 실행 중인 사용자와 프로젝트 설정의 "CompanyName" 또는 "ProductName"에 따라 변경될 수 있습니다. 게임을 만들 때 게임이 출시되기 전에 "CompanyName"과 "ProductName"을 결정하고 나중에 변경하지 마십시오.
이 경로는 실행 중인 플랫폼에 따라 다릅니다. 아래는 공식 웹 사이트에 나열된 경로입니다. Unity 버전에 따라 달라질 수 있으니 꼭 실행해서 확인해 보세요.
값을 저장합니다
대상 경로를 결정하기만 하면 .NET 표준 라이브러리에서 데이터 쓰기 및 읽기를 처리할 수 있습니다. 이번에는 데이터를 하나의 클래스로 결합하고 JSON으로 문자열을 작성하고 문자열을 대량으로 작성합니다.
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 Standard 라이브러리에서 지원하므로 특별히 어려운 것은 없다고 생각합니다. 먼저 실행하고 저장해 보겠습니다.
경로 위치를 보면 파일이 저장된 것을 볼 수 있습니다.
텍스트 파일을 열면 입력이 JSON 형식으로 저장된 것을 볼 수 있습니다.
이번에는StreamWriter
파일을 쉽게 쓸 수 File
있도록 클래스를 사용하고 있지만 와 같은 다른 클래스를 사용하면 문제가 없습니다.
저장된 값 가져오기
읽는 것도 어렵지 않다고 생각합니다.
<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("読み込みました。");
}
저장된 텍스트를 읽고 복원 메서드로 JsonUtility.FromJson
JSON 문자열을 역직렬화할 수 있습니다.
게임을 실행하고 Load from empty 버튼을 클릭하여 입력 필드가 채워지는지 확인합니다.
요약
Application.persistentDataPath
를 사용하여 지정된 위치에 데이터를 읽고 쓸 수있었습니다.
파일로 저장할 수 있기 때문에 대용량 데이터를 저장할 수도 있습니다.
그러나 이 폴더 경로에 저장된 데이터는 여러 환경에서 동기화될 수 있으므로
이 경우 큰 파일을 저장할지 아니면 다른 위치에 저장할지를 고려해야 합니다.