카테고리 없음

Inspector 창을 활용한 아이템 관리(JSON으로 데이터 저장)

이더23 2024. 12. 3. 21:16

실제 게임을 만들기 전에 임시방편으로 아이템 데이터를 넣는 기능을 넣을려고 한다. 그래서 찾은 방법이 인스펙터창에서 JSON정보를 저장하는 방법이 있어서 그거를 사용해 보겠다.

코드

데이터 입력하는 코드

[System.Serializable]
public class ItemInstance
{
    public int id;          //서버에서 발급해주는 아이템 아이디
    public int itemId;      //기획 데이터에 있는 아이템 아이디
    public int count;
    public int enhance;     //강화 횟수
}

[System.Serializable]
public class ItemInstanceData       //인스펙터창에 정보 표기하기 위해서 사용된 클래스
{
    public List<ItemInstance> itemInstances;
}

[System.Serializable] 속성을 사용하여 Unity Inspector 창에서 데이터를 입력할 수 있도록 직렬화 시켰다.

 

데이터 저장하는 코드

public class DatabaseManager : MonoSingleton<DatabaseManager>
{
    public ItemInstanceData items;
    public string fileName;

    [ContextMenu("To Json Data")]
    private void SaveItemData()
    {
        string jsonString = JsonUtility.ToJson(items, true);
        string path = Path.Combine(Application.dataPath, $"{fileName}.json");
        File.WriteAllText(path, jsonString);
        ItemManager.Instance.Initialize(LoadItemData());
    }

    private ItemInstanceData LoadItemData()
    {
        string path = Path.Combine(Application.dataPath, $"{fileName}.json");
        string jsonString = File.ReadAllText(path);
        return JsonUtility.FromJson<ItemInstanceData>(jsonString);
    }
}

SaveItemData() : 

- Inspector에서 입력한 데이터를 JSON으로 변환

- 생성한 JSON 파일을 지정된 경로에 저장.

- 저장 후 데이터를 다시 로드하여 ItemManager 클래스에 초기화.

 

LoadItemData() :

- 지정된 경로의 JSON 파일을 읽어 데이터 객체로 변환(JsonUtility.FromJson).

 

위와같이 코드를 작성하면 이제 DatabaseManager스크립트 붙여놓은 인스펙터창에서 데이터 입력하고 스크립트 우클릭해서 To Json Data 를 클릭하면 입력한 데이터가 저장이 된다.