-
2024.2.21 - JsonTIL 2024. 2. 21. 20:45
개인프로젝트 최종 제출이 내일 21시까지라서 좀 빡빡하긴 하지만 Json부분을 거의 완성시키면 내일 할 것을 적 만들고 보상 얻고 MainScene으로 이동하면 되는 거기 때문에 가능하지 않을까 싶습니다.
1. Json 생성
처음에는 시스템이 따로 있는가 했는데요. 그건 아니였습니다.
정보를 저장할 것을 가질 cs파일을 만들어줍니다.
거기에 저장할 변수들을 적어줍니다.
class PlayerData { public int characterIndex; public string name; public int level; public int coin; public int health; public int exp; public float speed; public int attack; public int defense; public float critical; }
이 변수들에게 값을 입력해주기 위한 cs를 만들어줍니다.
public class Json : MonoBehaviour { PlayerData playerData = new PlayerData(); }
+ 저는 class Json 위에 class PlayerData를 만들었습니다.
만약 각각 다른 cs에 만들경우에는 public class PlayerData로 만들어줘야합니다.
이러면 일반적인 class .cs 파일과 다를게 없습니다.
Json은 따로 파일을 저장하여 다른 씬에서도 불러올 수 있고, 게임을 껐다 킨다해도 내용은 변하지 않습니다.
파일을 따로 생성하는 것이 가장 중요한데요.
path = Application.persistentDataPath + "/" + filename; string data = JsonUtility.ToJson(playerData); File.WriteAllText(path, data);
Application.persistentDatapath는 유니티에서 알아서 생성해주는 파일 경로를 가져옵니다.
JsonUtility.ToJson() : 저장할 정보를 모아둔 class 파일을 Json으로 변환시켜줍니다. 변환된 Json은 string으로 return됩니다.
File.WriteAllText(경로, Json) : Json에 있는 모든 내용을 텍스트로 만들어서 File을 생성해줍니다.
생성된 파일은 경로에 저장되는데요.
경로에 /filename을 추가해줘서 원하는 filename으로 Json을 생성해주도록 하겠습니다.
filename을 save로 지정해서 만들어주었습니다.
열 때 visual studio나 메모장을 연결 프로그램으로 선택해서 열면 저장된 값들이 보입니다.
만약 filename을 바꾸게 된다면, 저장된 file이 여러개 생겨서 그 중에서 선택해서 file을 가져올 수 있게도 만들 수 있을 것 입니다.
2. Json 가져오기
Json을 생성해서 저장했다면 그것을 가져와서 다른 씬으로 내용을 전달해야하는데요.
string data = File.ReadAllText(path); playerData = JsonUtility.FromJson<PlayerData>(data);
Json이 텍스트로 저장되었기 때문에(WriteAllText) 텍스트를 읽어서 가져와줍니다.
Json은 string형태이므로 string으로 값을 받아와주고,
FromJson<변환시킨 class명>(받아온 Json string 명) : 저장되어있던 Json을 string으로 받았기 때문에 괄호에는 string이름을 적어줍니다. <>에는 데이터를 저장해주는 class 이름을 적어주면 class에 있는 변수에 Json이 저장된 값들이 알아서 들어가게 됩니다.
Json을 이용해서 캐릭터 선택(인덱스)과 이름을 받아서 다음 씬에서 Json을 불러와 인덱스와 이름을 사용해주었습니다.
좀 욕심을 부려서 씬을 많이 사용했더니 Json을 배우게되네요 ㅎㅎ