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 아래 코드가 정상 작동하지 않을 수 있다. 따라서 정각에만 동작하도록 코드를 수정해보았다.