C#/Unity 3D

[UnityWebRequest] API 호출을 위해 UnityWebRequest(GET) 사용하기

hizzi 2024. 4. 17. 14:18

UnityWebRequest

  HTTP Request을 구성하고 HTTP Response를 처리하기 위한 모듈식 시스템을 제공한다.

  Unity가 최신 웹 브라우저의 백 엔드와 상호작용하도록 하며, [대량의 HTTP 요청, POST/PUT 스트리밍 작업, HTTP 헤더 및 동사 완벽 제어] 등을 지원한다.

(참고 : https://docs.unity3d.com/kr/2022.3/Manual/UnityWebRequest.html)

 

  GET 방식과 POST 방식이 있지만, 내가 사용한 API는 POST 방식을 지원하지 않아 GET 방식으로만 진행했다.

 

UnityWebRequest 통신 방식

(1) GET 방식

private IEnumerator Test(string url)
{
    using (UnityWebRequest webRequest = UnityWebRequest.Get(url))
    {
        yield return webRequest.SendWebRequest();

        if (webRequest.result == UnityWebRequest.Result.ConnectionError)
        {
            Debug.Log("[Error] " + webRequest.error);
        }
        else
        {
            Debug.Log("[Success] " + webRequest.downloadHandler.text);
        }
    }
}
  • UnityWebRequest.Get(url)으로 url(서버 주소)과 GET 방식으로 통신한다.
  • yield return : return되어 종료되는 것이 아닌 일시정지, 다음 프레임까지 대기했다가 yield return 아래 코드부터 호출된다. 프레임 내의 모든 Update() 함수가 호출된 후 실행여부를 체크한다.
private void Update()
{
    if(DateTime.Now.Minute == 00 && DateTime.Now.Second == 0)
    {
        StartCoroutine(this.GetWeatherInfoByUnityWebRequest(this.url));
    }
}
  • StartCoroutine()으로 해당 함수를 호출한다.
  • 일정 조건 없이 호출하게 될 경우, 너무 많은 통신으로 인해 yield return 아래 코드가 정상 작동하지 않을 수 있다. 따라서 정각에만 동작하도록 코드를 수정해보았다.