목차
Json 사용하기!
오늘 한 내용
[기초]
1. json 으로 인적사항 데이터(한 사람)를 저장하고 다시 불러오기 해본 후 (직접 작성하기) (하나)
2. 한 사람이 아닌 여러면의 데이터를 저장 하고 다시 불어오기를 해본다. (List)
[심화]
3. 오브젝트를 랜덤생성(타입, 크기, 회전방향, 위치) 한 후, 저장 버튼을 눌렀을 때의 오브젝트를 json 으로 저장한 후, 다시 불러오기 해보기 (하나)
4. 저장버튼을 눌렀을 때, 나온 모든 오브젝트를 json 에 저장한 후 , 다시 다 불러오기 해보기 (List)
Json 을 사용하는 이유
유니티 생성!
씬을 JsonScene 이라고 명명하고
빈게임오브젝트로 DataManager 로 만든다!
그리고 똑같은 이름의 스크립트를 만들어서 또 넣어준다!
이렇게 인적사항을 적어보자
변수 선언 해주고,
Start 에서 값을 넣어주고
1 번을 누르면 각각 출력 해주는거임!
우리가 이걸 파일로 저장한다면 어떻게 저장해?
PlayerPrefs 로!
근데 이런식으로 저장하면, 엄청 많아짐..
다른사람도 다 들어오면 키 값도 다 다르게 해줘야 하는데,,?
그래서 문자열로 만들어줘야함
그게 이제 Json 인거임
그러니까 이걸 이제 Json 으로 바꿔주는걸 해보자!
지금 까지 쓴 코드는 이런 상황
(참고) 지역변수와 전역변수의 Default 값 부여 차이
![](https://blog.kakaocdn.net/dn/cl50eg/btrKyrtde8U/KHtD8fGQ4tYhrEC1JMsoKk/img.png)
전역변수는 자동으로 초기값이 있는데 지역변수는 값이 들어가 줘야함!
0으로 자동으로 안됨!
복붙한건데, 이제 여기다가 Json 형식으로 넣을거임
Json 의 형식
좌측에는 Key , 우측에는 그 Key 에 맞는 값이 들어간다.
다른사람들 것도 넣으려면 ( , ) 를 쓴다
(참고)Key 가 Numders 이고 그 안에 값이 많은 경우, 배열로 집어 넣는다
![](https://blog.kakaocdn.net/dn/S5XNQ/btrKzC2oyY2/nzVJBw3D1fK0VhcDtmfS0K/img.png)
![](https://blog.kakaocdn.net/dn/YxqQj/btrKEqsfP57/HVINAXnrhl6d5Mig7W7rn1/img.png)
class 를 하나 더 만들어 주고, 전역변수를 넣었던걸 여기로 넣자
class 를 하나 더 만들어 줌으로써, 데이터를 사용할 형식. 즉, 틀을 형성할 수 있음
전역변수를 다 뺐으니, 이걸 사용한 밑에는 다 오류 뜰 텐데?
위에 사용한 클래스를 new 생성자를 통해 info라는 이름으로 넣어준다!
중요! Json 형식을 사용할 틀 클래스는 Serializable 을 넣어줘야한다!
네임스페이스에 System 이 있으면, 여기서 System. 을 쓸필요는 없음
이렇게 만들면,
JsonUtility 에 ToJson 이라는 메소드를 이용해서, Json 형식으로 값이 들어가지게 된다.
info 값을 저 값으로 던져준다는 얘기임!
근데 이렇게 한줄로 나오면 안이쁘니까
true 를 넣어주면 prettyPrint 로 이쁘게 나옴 ㅋㅋ
근데 통신 할때는 이거 안하는게 좋음! 최대한 용량적게 하기 위해서!
여튼, 이 jsonData 를 MyInfo 라는 키값으로 저장을 하면 저 위에 있는 데이터를 다 저장 할 수 있게 되는거임
저기 GetString("MyInfo")로 해야함(대문자M) 오타임
Json 을 UserInfo 형태로 바꿔주는거임 지금 모든정보가 한줄에 등록되어있는거니까,
하나하나 잘라서 써야하는 우리는 이걸 바꿔주는것 까지 해보는거임!
보통 네트워크에서 Json 형태로 받으면 우리가 이런식으로 바꿔서 써야하는 거임
그니까, info = JsonUtility.FromJson<UserInfo>(jsonData);
는 1줄짜리 String 에 있는 키 값들이 지금 UserInfo 클래스에 있는 키값을 찾아서
UserInfo 클래스에 있는 변수에 착착 들어가는거임
다수의 데이터다뤄보기
지금 까지는 한명이지만 다수의 데이터를 다루어본다면??
이제 10명의 데이터를 생성해보자
friendList 라는 배열에 모든 데이터를 추가한다.
이 10명의 프렌드 배열을 제이슨으로 만들 거임!
이 배열 데이터를 아까처럼 jsonData 로 넣어준다.
한줄짜리 데이터로 만들기 느낌!
잘 들어갔는지 확인해보려고 print 를 해보니까
왜?? 정확한 Key Value 값이 있어야 해서 그렇다
이 배열들을 다 감싸는 키값이 있어야 함
이걸 우리는 data 라는 이름으로 만들어보자
이렇게 되려면 클래스가 하나 더 있어야 함!
클래스로 배열을 담을 변수 만들기.
UserInfo 를 담는 List 를 만들면 됨,
이름은 data (Key값)
다시 돌아와서, arrayData 를 생성하고,
여기 data 에 friendList 를 넣는다.
그 후, Json 으로 변형시켜보자!
Json 형식으로 변형 완료,
print(friendList 의 이름) 로 했으니,
그 배열들의 하나하나 이름들이 뜰거임
Json 으로 오브젝트 저장 및 생성하기
1. 일단 하나만 생성하고, 저장해서 나오게 하는거랑
2. 다량으로 생성해서 저장 -> 한꺼번에 다 나오게 해볼거임
버튼 생성하고, 이걸로 오브젝트 생성을 해보자
UIMananger 스크립트 생성
이런 메소드가 있음.
GameObject 에 CreatePrimitive.
타입의 숫자가 도형을 나타냄
버튼을 누르면, 랜덤한 위치에 랜덤한 방향, 랜덤한 크기의 랜덤한 도형이 나오게 함
저장 버튼도 복붙 해서 만들자
저장버튼 만들기
위에서 했던것 처럼 이것들을 모을 수 있는 클래스를 만들어야함!!
(참고) 구조체 sturcture
구조체를 써도 됨
클래스와 구조체는 거의 비슷함
클래스는 ref 타입
구조체를 Value 타입임
타입, 위치 크기 각도를 담는 클래스 틀을 만든다.
Json 으로 저장!
오브젝트 생성 (스피어 하나 나옴)-> 저장버튼 -> 저 값들이 저장됨
이제 생성을 많이 해보고, 마지막꺼만 저장하는게 아니라
그 모든 정보들을 한꺼번에 다 저장한 후, 나오게 해볼거임
다량의 정보들을 한꺼번에 저장!
이제 OnClickSave() 에 파일 형태로 저장시켜보자
File 이라는걸 써야 하는데, 그럴려면 using System.IO 가 필요하다.
그렇기 때문에 Alt+Enter 누르면 NameSpace 선택해서 바로 등록가능!
이제 파일에 저장할건데 저장하려면 경로가 있어야함
경로를 먼저 설정해보자
Asset폴더 바로 밑에다가 저장 할거임
그럴려면 저장 할 path 가 있어야함
(참고) 모바일의 경우는 같은 path 지만 쓰는 형식이 다르다.
pc로 할 때 Asset 폴더 바로 하위 path 는 저렇게 쓰면 되는데,
모바일 할 때는 Application.persistentDataPath 를 사용해야함
이제 path 에 어떤 이름으로 저장하겠다는건지도 저장해야함
생성 하고 저장 하면
첫 번째 보면, Json 형식이 저장된다.
두 번째는 asset 바로 하위 까지 path 이고
세 번째는 어딘가 모를 모바일이 써야할 path 이다.
근데 만약에 바로 data 파일 생성하는거 말고, Data 라는 폴더를 만들어서, data 를 넣고싶다면 어떻게 할까?
Directory.Exits -> 이 경로가 존재 하는지 확인 하는거임!
존재하지 않으면, 생성하겠다는것
이제 Load 함수를 생성해서, 데이터를 출력해보자
이제 이걸 토대로, 우리는 오브젝트를 만드는것 까지 할 거임!
이제 CreateObj 함수에 있던거를 좀 빼서 따로 함수로 만들자.
Load 에 넣어서 쓰게.
OnCreateObject 에 있던걸 가져와서, info 에 들어있는 값으로 치환 함
그 결과
이것도 정보를 위와같이 바꿔줌
File 에 json 형식으로 되어있는 데이터를 불러왔고,
그 데이터를 다시 Class 안에 있는 틀로 바꿔준거임
그 틀에 맞는 값으로 Create 를 한거고
지금까지, 랜덤으로 생성해주고, 저장해주면
불러오기를 눌렀을 때 똑같이 불러오게 해주는거임!
딱 하나만
이제는 다량으로 해볼거임
근데 이제, 생성 했을 때마다 정보를 저장하게 하고싶으면?
List 로 해보자
생성할 때마다, List 에 저장하게 만들자!
objInfoList.Add(objInfo);
OnClickSave 에 저렇게 바꿈
Json 을 쓰려면 그 틀을 Class 로 만들어줘야 겠지?
리스트를 틀로 만들기!
이제 Load 하는것도,
for 문을 통해서, 한번에 다 생성하게 해줘야 함.
그리고 여기에 objInfoList.Add 해주면 불러왔던 데이터를 추가해주는것임!
다시 실행하면, 다 사라지니까.
'Network' 카테고리의 다른 글
Http (GET,POST) 게시물 조회, 전체 게시물 조회, 회원가입 (0) | 2022.09.01 |
---|