본문 바로가기
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로 바꿔주며 에러를 해결하였다.