본문 바로가기
Unity3D

Unity 에서 GET HTTP 호출 하기 UnityWebRequest

by 따봉이 2020. 11. 17.
728x90
반응형

Unity 툴 설정

 

1. Hierarchy에 빈 게임 오브젝트를 만들고 이름을 MainController로 합니다.

2. C#파일을 MainController로 생성하고 게임오브젝트 MainController의 콤포넌트에 

추가합니다.

3. UI > Text 오브젝트를 작성하고 MainController스크립의 속성인 Text Result에 연결합니다.

 

4. UI > Button 오브젝트를 생성하고 On Click 이벤트를 버튼에 추가합니다.

5. 추가한 On Click 이벤트에 MainController 오브젝트를 연결하고 Function 에 MainController 

OnClick 메소드를 지정합니다.

 

 

Unity에서 HTTP 사용하는 방법

 

-----MainController.cs----

using System.Collections;
using UnityEngine;
using UnityEngine.Networking;

public class MainController : MonoBehaviour
{
    //접속할 URL
    private const string URL = "http://naver.com/api/search?zipcode=7830060";

    //게임오브젝트UI > ButtonのInspector > On Click()에서 호출하는 메소드
    public void OnClick()
    {
        //코루틴 호출
        StartCoroutine("OnSend", URL);
    }

    //코루틴
    IEnumerator OnSend(string url)
    {
        //URL을 GET으로 호출함
        UnityWebRequest webRequest = UnityWebRequest.Get(url);
        //URL에 접속하여 결과값을 불러올때까지 대기
        yield return webRequest.SendWebRequest();

        //에러가 발생했는지 체크
        if (webRequest.isNetworkError)
        {
            //호출 실패
            Debug.Log(webRequest.error);
        }
        else
        {
            //호출 성공
            Debug.Log(webRequest.downloadHandler.text);
        }
    }
}

 

 

Unity 에서 JSON DATA를 불러와서 Serializable 클래스에 넣는 방법

-------------MainController.cs-----------
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

public class MainController : MonoBehaviour
{
    //접속할 URL
    private const string URL = "http://naver.com/api/search";
    //JSON테이터를 표시할 UI > Text오브젝트
    public Text textResult;

    //게임오브젝트 UI > ButtonのInspector > On Click()에서 호출되는 메소드
    public void OnClick()
    {
        //코루틴 호출
        StartCoroutine("OnSend", URL);
    }

    //코루틴
    IEnumerator OnSend(string url)
    {
        //POST할 정보
        WWWForm form = new WWWForm();
        form.AddField("zipcode", 1000001);

        //URL을POST방식으로 호출
        UnityWebRequest webRequest = UnityWebRequest.Post(url, form);
        //UnityWebRequest에 버퍼설정
        webRequest.downloadHandler = new DownloadHandlerBuffer();
        //URL로 접속해서 결과를 가져올때까지 대기
        yield return webRequest.SendWebRequest();

        //에러발생 체크
        if (webRequest.isNetworkError)
        {
            //호출실패
            Debug.Log(webRequest.error);
        }
        else
        {
            //호출성공
            //Zip클래스에 JSON데이터를 넣는다
            Zip zip = JsonUtility.FromJson<Zip>(webRequest.downloadHandler.text);
            //zip에 담은 JSON데이터를 게임오브젝트UI > Text 출력한다
            textResult.text = zip.message + "," + zip.results.Length + "," + zip.status;
            foreach (ZipResult zr in zip.results)
            {
                textResult.text += string.Format("\n{0},{1},{2},{3}", zr.address1, zr.address2, zr.address3, zr.prefcode);
            }
        }
    }
}

 

불러온 JSON 데이터

JSON데이터.txt
{
    "message": null,
    "results": [
        {
            "address1": "서울",
            "address2": "강남구",
            "address3": "강남대로",
            "prefcode": "13",
            "zipcode": "1000001"
        }
    ],
    "status": 200
}

 

JSON 데이터를 담을 Serializable 클래스

Zip.cs
[System.Serializable]
public class Zip
{
    public string message;
    public ZipResult[] results;
    public int status;
}
ZipResult.cs
[System.Serializable]
public class ZipResult
{
    public string address1;
    public string address2;
    public string address3;
    public string kana1;
    public string kana2;
    public string kana3;
    public string prefcode;
    public string zipcode;
}

 

728x90
반응형

댓글