본문 바로가기

Unity

[Unity] JSON 사용법 활용

출처 : https://velog.io/@zxzz45/%EA%B8%B0%EC%88%A0-%EB%A9%B4%EC%A0%91JSON

 

 

 


 

 

Unity에서 JSON을 활용하여 데이터를 외부에 저장하는 방법을 알아보겠습니다.

 

혹시나 JSON 기초를 모르시는 분께서는 제가 정리해둔 JSON 기초를 참고해주세요.

https://ayun-programmer.tistory.com/26

 

[Unity] JSON 사용법 기초

[JSON 이란?]JSON은 위에 그림에 표시 된것처럼 JavaScript Object Notation의 약자입니다. Unity에서 어떤 데이터를 저장하거나, 데이터를 통신으로 보낼 때 사용되는 JSON은 Unity 개발자라면 필수적으로 알

ayun-programmer.tistory.com

 

 


 

 

간단하게 2d, 3d상관없이 Unity 프로젝트를 열어줍니다.

그리고 DataManager라는 C# 스크립트를 생성해줍니다.

 

 

DataManager를 열어 코드를 작성해보겠습니다.

DataManager의 역할은 데이터를 저장하고 불러오는 것 입니다.

public class PlayerData
{
    public string name;
    public int level;
    public int coin;
}

위 PlayerData를 만들어 사용해보도록 하겠습니다.

 

 

public class DataManager : MonoBehaviour
{
    private PlayerData nowPlayer = new PlayerData();
}

PlayerData를 생성해 줍니다. 저장 및 로드되는 데이터는 nowPlayer입니다.

 

 

1. 저장될 경로(path)

private string path;
private string fileName = "Save"; // 저장될 파일 이름

private void Awake()
{
    // Unity가 알아서 생성해준 폴더
    path = Application.persistentDataPath + '/';
}

저장될 경로는 마음대로 설정할 수 있지만 간단한 예제이기 때문에 Unity가 자동으로 생성해준 폴더 경로인 Application.persistentDataPath를 사용하겠습니다.

저장될 파일의 이름을 경로 뒤에 붙여 파일들을 구분하기 위해 경로 끝에 '/'를 추가해주고 실제 사용될 때 path 뒤에 붙여주도록 하겠습니다.

 

 

2. SaveData

public void SaveData()
{
    string data = JsonUtility.ToJson(nowPlayer);
    File.WriteAllText(path + fileName, data);
}

기초에서 다뤘듯이 ToJson을 사용해서 nowPlayer를 string으로 저장해줍니다.

그리고 File.WriteAllText()를 사용해서 경로, 데이터를 매개변수로 넘겨줍니다. 이렇게 되면 넘겨준 경로에 데이터가 Text로 저장되게 됩니다.

 

※ File.WriteAllText를 사용하기 위해서는 using System.IO; 를 추가해주세요.

 

 

2. LoadData

public void LoadData()
{
    string data = File.ReadAllText(path + fileName);
    nowPlayer = JsonUtility.FromJson<PlayerData>(data);
}

외부에 저장된 텍스트를 불러올 때는 File.ReadAllText()를 사용합니다. 이렇게 되면 data변수에는 매개변수에 넣어준 경로에 있는 데이터가 저장되게 됩니다.

이렇게 받은 데이터를 PlayerData Type으로 변환하기 위해서 FromJson을 사용하여 data를 PlayerData로 변환해줍니다.

변환된 data값은 nowPlayer에 저장됩니다.

 

 


 

 

이렇게 간단한 코드를 통해 외부에 자료를 저장하는 방법을 알아보았습니다.

실제 데이터들은 서버에 저장하는 경우가 대부분입니다. 제가 소개해드린 예제는 활용의 일부분이라고 생각해 주시고 이를 활용, 확장하여 프로젝트에 적용시켜주세요!

 

 

전체 코드
using UnityEngine;
using System.IO;

public class PlayerData
{
    public string name;
    public int level;
    public int coin;
}

public class DataManager : MonoBehaviour
{
    private PlayerData nowPlayer = new PlayerData();

    private string path;
    private string fileName = "Save";

    private void Awake()
    {
        // Unity가 알아서 생성해준 폴더
        path = Application.persistentDataPath + '/';
    }

    public void SaveData()
    {
        string data = JsonUtility.ToJson(nowPlayer);
        File.WriteAllText(path + fileName, data);
    }

    public void LoadData()
    {
        string data = File.ReadAllText(path + fileName);
        nowPlayer = JsonUtility.FromJson<PlayerData>(data);
    }
}

'Unity' 카테고리의 다른 글

[Unity] JSON 사용법 기초  (0) 2024.08.17