[유니티 C#] newtonsoft.JSON 안 쓰고 서버 API URL에 메세지(값) 보내기
유니티(Unity)에서 JsonUtility이용하여 json 사용하기(유저 데이터 저장)
유니티를 이용하여 게임을 제작 시 유저의 데이터(점수, 위치)등을 저장해야 하는 경우가 있습니다. 그러기 위해서 Json이라는 형식을 이용하면 텍스트로 이루어져 있기 때문에 이해하기도 쉽고,
scvtwo.tistory.com
[유니티 Json 파싱] Newtonsoft.Json & Unity JSON Utility
🟦 Newtonsoft.Json 🟧 Document 참고영상 : 베르의 게임 개발 유튜브 https://docs.microsoft.com/ko-kr/dotnet/standard/serialization/system-text-json-how-to?pivots=dotnet-5-0 C#을 사용하여 JSON을 직렬화 및 역직렬화하는 방법
ojui.tistory.com
이 포스트들을 참조했습니다.
서버에 메세지, 값 등을 보내고 받을 때 보통 JSON을 사용하여 보낸다.
유니티에서 JSON 통신을 위한 라이브러리가 있는데
1. JsonUtility
2. WWWForm
3. Newtonsoft.Json
이 있다.
사용하기가 가장 쉬운 것인 WWWForm 로 해보겠다.
UnityEngin 네임스페이스에 있으므로 따로 using을 걸 필요가 없다.
사용방법은
WWWForm form = new WWWForm();
form.AddField("DB나 서버에서 사용하는 값 이름", "string"); // 변수타입이 문자 일 때
form.AddField("DB나 서버에서 사용하는 값 이름", int); // 변수타입이 숫자 일 때
form.AddField("DB나 서버에서 사용하는 값 이름", arr[0]); // 변수 타입이 배열 일 때
form.AddField("DB나 서버에서 사용하는 값 이름", arr_s[3] ?? "0"); // ??를 이용한 연산식도 가능
물음표 연산식에 대한 내용은 다음 포스트에 있다.
https://developstudy.tistory.com/69
C# ?. ?? 연산자
개요 ?. ?? 모양부터 ??하게 만드는 연산자. 무슨 연산자인지 살펴보자. ?. 연산자 ?. 연산자는 [ Null이 아니라면 참조하고, Null이라면 Null로 처리 ]하라는 뜻이다. class CClass { public List lstNumber = new Lis
developstudy.tistory.com
저렇게 form 선언 후 form.AddField 함수로 폼에 값을 넣는다.
보통 보내는 값의 순서는 생각하지 않는다, 서버에서 받았을 때 해당 값이 특정한 값이면 특정한 곳에 넣기 때문
using (UnityWebRequest webRequest = UnityWebRequest.Post(apiPath, form))
{
// wait up to one second to download the image
webRequest.timeout = 30;
yield return webRequest.SendWebRequest();
switch (webRequest.result)
{
// 일반 Error일 때
case UnityWebRequest.Result.ConnectionError:
break;
case UnityWebRequest.Result.DataProcessingError:
break;
// HTTP Error일 때
case UnityWebRequest.Result.ProtocolError:
break;
// Post 성공
case UnityWebRequest.Result.Success:
// 값은 webRequest.downloadHandler.text 로 들어온다.
// Json으로 보냈으니 리턴값도 Json
break;
case default:
break;
}
}
using 함수로 서버에 데이터를 보낸다.
기본적으로 TimeOut은 1분~3분 사이가 디폴트다.
너무 길다고 생각되면 코드대로 30초 정도로 걸자.
웹에서 리턴된 Json 값은 JsonUtilty를 이용해서 파싱할 수 있다.
string name = JsonUtility.FromJson<파싱할 class 또는 struct 이름>(webRequest.downloadHandler.text).캡슐 안의 어떤 값 이름;
Json 캡슐 내의 어떤 값을 파싱할 때 해당 파싱값을 사용하는 class 또는 struct 이름으로 파싱할 수 있다.
예를들면 다음과 같이 쓸 수 있다.
string name = JsonUtility.FromJson<UserDB>(webRequest.downloadHandler.text).username;
UserDB 구조체로 파싱하여 유저 이름으로 읽어온다는 뜻이다.