본문 바로가기
Unity

[UNITY, C#] unitywebrequest downloadProgress 값이 일정하게 증가하지 않는 경우 해결

by 아마도개발자 2024. 2. 15.
반응형

 

Unity에서 호출한 API의 response에 대한 progressBar를 구현할 때, UnityWebRequest의 downloadProgress를 사용하게 된다.

 

downloadProgress를 활용하여 아래와 같이 progressBar의 %를 계산하여 보여주는 함수가 있다.

public IEnumerator ShowDownloadProgress(UnityWebRequest www) {
    while (!www.isDone) {
        if(LoadingScreen.instance != null)
            LoadingScreen.Fill(www.downloadProgress);
        Debug.Log(string.Format("Downloaded: {0}%", www.downloadProgress));
        yield return new WaitForSeconds(.1f);
    }
    Debug.Log("Done");
}

 

정상적으로 작동한다면 www.downloadProgress가  0~1 까지 오름차순으로 찍히게 될 것이다. 
하지만 직접 실행했을 때 progress의 값이 올라갔다 내려갔다 하며 변경될 때가 있었다.

 

그 원인은 유니티가 아닌 Server의 API Response에 있다.

 

[HttpPost("sample")]
public IActionResult sample([FromBody] string body)
{

    ... 중략 ...
    string json = JsonConvert.SerializeObject(new { Items = result });

    return Content(json, "application/json");
    
}

 

 

[HttpPost("sample")]
public IActionResult sample([FromBody] string body)
{

    ... 중략 ...
    string json = JsonConvert.SerializeObject(new { Items = result });

    return Ok(json);
    
}

 

위 두 로직 모두 json이라는 동일한 값을 리턴하며 statusCode를 200으로 지정해준다. 둘 사이에 차이가 없다고 생각할 수 있지만, 사실은 큰 차이가 있다.

Content와는 다르게 Ok로 리턴한 response에는 content-length값이 없기 때문이다. 전체 사이즈를 알려주는  content-length가 없기 때문에 download 데이터의 크기가 들쭉날쭉하는 문제가 발생한 것이었다.

 

때문에 기존에 Ok로 리턴하던 것을 Content로 바꿔주며 에러를 해결하였다.

 

 

반응형