Unity - Scripting API: JsonUtility
Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close
docs.unity3d.com
Json은 사용법이 단순해서 Unity에 따로 기능이 없다고해도 사용에 큰 문제는 없을겁니다.
다만 데이터를 꺼내고 쓸때 이름과 형식을 하나하나 지정해야 한다는 단점에 의해
Json으로 저장하는 Data구조가 많아질수록 코드가 지저분해질 가능성이 높아집니다.
그렇기에 Unity에서는 JsonUtility를 이용해서 Data를 관리하는 것이 좋습니다.
사용법
Class 배열을 Json에 저장하고 불러오는 예제를 만들어보겠습니다. (구조체도 동일)
[Serializable]
public class SkillData
{
public int ID;
public string name;
public string description;
public int[] value;
public int[] coolTime;
}
[Serializable]
public class SkillDatas
{
public SkillData[] skillDatas;
}
C# Script
{
"skillDatas": [
{
"ID": 1,
"name": "구르기",
"description": "구르기 동작을 할 수 있으며, 몬스터의 공격을 회피할 수 있습니다.",
"coolTime": [5, 4, 3, 2]
},
{
"ID": 2,
"name": "막기",
"description": "방패를 통해 몬스터의 공격을 막을 수 있습니다.",
"coolTime": [6, 5, 4, 3]
},
{
"ID": 3,
"name": "추가 데미지",
"description": "몬스터 공격시 일정 확률로 추가 공격합니다.",
"value": [10, 20, 30, 40, 50]
}
]
}
JSON
Class를 배열로 Json에서 불러오고 저장할 때는 해당 Class배열을 들고 있는 다른 Class를 만들어줘야합니다.
또한 C#에서 정의한 데이터의 이름과 Json에서 설정한 이름이 대소문자까지 일치해야 합니다.
불러오기
void LoadJsonSkillData()
{
TextAsset jsonText = Resources.Load<TextAsset>("Datas/JS_SkillData");
SkillDatas s = JsonUtility.FromJson<SkillDatas>(jsonText.text);
}
Json에서 데이터를 불러올 때는 TextAsset으로 파일을 불러온 후
JsonUtility.FromJson 함수를 이용하여 데이터로 변환하면 됩니다.
저장하기
void SaveJsonSkillData()
{
string savePath = Application.dataPath + "Resources/Datas/Test.json";
SkillDatas s = new SkillDatas();
s.skillDatas = new SkillData[]
{
new SkillData
{
ID = 1,
name = "TEST_1",
description = "테스트입니다.",
coolTime = new int[] {123, 234, 345, 456}
},
new SkillData
{
ID = 2,
name = "TEST_2",
description = "이것도 테스트입니다.",
value = new int[] {12, 23, 34, 45, 56}
}
};
string json = JsonUtility.ToJson(s);
File.WriteAllText(savePath, json);
}
저장할 경로를 설정해주고 데이터를 정의해줍니다.
그리고 ToJson함수로 string으로 변환시켜준 후에 File.WriteAllText함수로 파일을 생성하면 됩니다.
{"skillDatas":[{"ID":1,"name":"TEST_1","description":"테스트입니다.","value":[],"coolTime":[123,234,345,456]},{"ID":2,"name":"TEST_2","description":"이것도 테스트입니다.","value":[12,23,34,45,56],"coolTime":[]}]}
정상적으로 생성됩니다.
'Unity' 카테고리의 다른 글
유니티 퀘스트 설계 아이디어 (ScriptableObject) (0) | 2024.07.07 |
---|---|
Unity Instantiate (1) | 2024.06.11 |
Input Action Asset (0) | 2024.05.30 |
Unity Google Admob (0) | 2024.04.22 |
Unity JAVA_TOOL_OPTIONS Error (Gradle Bild failed) (0) | 2024.04.22 |