인프런 커뮤니티 질문&답변

루테닛댄님의 프로필 이미지
루테닛댄

작성한 질문수

[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)

CoSendWebRequest 관련 문의

작성

·

139

0

WebManager의 아래 코루틴 CoSendWebRequest에서

yield return uwr.SendWebRequest(); 부분을 통해서 request를 보내는 것까지는 이해를 했는데,

제가 알고있기로 코루틴에서 yield return 을 호출할 경우, 다음 프레임에서 코드가 이어서 실행되는 것으로 알고있는데요.

response를 언제 받을 지 모르는 상황이니까 별도로 response를 받았을때의 콜백을 입력해서 처리하는 것이 아닌가 생각했었는데, 실제 코드에서는 아래와 같이 바로 이어서 response를 받았을 때 처리되는 부분을 입력하고 있고, 또 이게 제대로 작동을 하니 잘 이해가 안됩니다.

아래와 같은 경우라면.. 다음 프레임 이전에 무조건 response가 온다는 확신이 있다는 것으로 이해가 되는데, 어떻게 이 부분을 확신할 수 있는건가요?

 

 using (UnityWebRequest uwr = new UnityWebRequest(sendUrl, method))
 {
     uwr.uploadHandler = new UploadHandlerRaw(jsonBytes);
     uwr.downloadHandler = new DownloadHandlerBuffer();
     uwr.certificateHandler = new CertificateWhore();
     uwr.SetRequestHeader("Content-Type", "application/json"); 

     yield return uwr.SendWebRequest();

     if (uwr.result == UnityWebRequest.Result.ConnectionError)
     {
         Debug.Log($"CoSendWebRequest Failed : {uwr.error}");
     }
     else
     {
         T resObj = JsonUtility.FromJson<T>(uwr.downloadHandler.text);
         res.Invoke(resObj);
     }
 }

답변 1

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

그렇지 않습니다.
yield return null; 을 하면 다음 프레임이지만
yield return new WaitForSeconds(5); 를 하면 5초 후로 예약하는 것이고
yield return SendWebRequest(); 하면 웹 response가 올 때 처리를 해주겠죠.

루테닛댄님의 프로필 이미지
루테닛댄
질문자

아 그렇구나.. 그럼 결과적으로 response 가 올 때 이어서 실행하는 것이군요. 답변 감사합니다!

루테닛댄님의 프로필 이미지
루테닛댄

작성한 질문수

질문하기