[2021] 🎓 졸업작품/[2021] 🎮 Unity

Unity C# Inumerator StartCoroutine 에러

락꿈사 2021. 12. 23. 15:52
참고
http://theeye.pe.kr/archives/tag/waituntil
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=happybaby56&logNo=221322535793

 

에러 내용 : Inumerate를 사용해서 서버에서 통신하여 이미지 data를 다 다운받을 동안 yield하게 했더니 data를 다 내려받지도 않았는데 배열에 접근하여 IndexOutOfRange 에러가 남

 

해결 방법 : IEnumerator안에서 StartCoroutine()으로 IEnumerator를 호출하면 호출된 IEnumerator가 끝날때까지 그 다음 코드를 실행하지 않는다는 점을 사용하여 IEnumerator를 중첩하여 호출

 

IEnumerator GetTexture()
{ 
            for (int i = 0; i < 5; i++)
            {
                int imageIndex = i+1;
                int fileIndex = i;
                string number = imageIndex.ToString("D3");
                UnityWebRequest www = UnityWebRequestTexture.GetTexture(String.Format("{0}image_{1}.png", domain, number));
                Debug.Log(String.Format("{0}image_{1}.png", domain, number));
                yield return www.SendWebRequest();

                if (www.error == null)
                {
                    Texture downloadImage = DownloadHandlerTexture.GetContent(www);
                    files[fileIndex] = downloadImage;
                    Debug.Log(imageIndex + "번째 이미지 서비스 완료");
                }
                else
                {
                    Debug.Log("이미지를 다운로드 받을 수 없습니다. 에러내용 : " + www.error);
                    yield break;
                }
            }
            
}

IEnumerator waitUntilDownloadImages()
{
	yield return StartCoroutine(GetTexture());
	_LoadImages();
}

StartCoroutine(waitUntilDownloadImages());

 

 

나를 매우 화나게 했던 에러. 거의 울기 직전에 해결함^v^...