Develop/유니티

[유니티 C#] newtonsoft.JSON 안 쓰고 서버 API URL에 메세지(값) 보내기

레다솔 2023. 6. 16. 10:26
728x90
반응형

https://scvtwo.tistory.com/18

 

유니티(Unity)에서 JsonUtility이용하여 json 사용하기(유저 데이터 저장)

유니티를 이용하여 게임을 제작 시 유저의 데이터(점수, 위치)등을 저장해야 하는 경우가 있습니다. 그러기 위해서 Json이라는 형식을 이용하면 텍스트로 이루어져 있기 때문에 이해하기도 쉽고,

scvtwo.tistory.com

 

https://ojui.tistory.com/90

 

[유니티 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 구조체로 파싱하여 유저 이름으로 읽어온다는 뜻이다.

728x90
반응형