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로 바꿔주며 에러를 해결하였다.
'Unity' 카테고리의 다른 글
[Unity] Play mode에서만 material 색상 바꾸는법 (0) | 2024.01.30 |
---|---|
[Unity] NullReferenceException: SerializedObject of SerializedProperty has been Disposed. 에러 발생 (0) | 2024.01.30 |