카테고리 없음
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 를 클릭하면 입력한 데이터가 저장이 된다.