프로그래밍 농장

코루틴 [ Unity ] 본문

Unity

코루틴 [ Unity ]

Tennessee201 2022. 7. 8.
728x90

코루틴 

: 처리와 처리 사이에 대기를 삽입할 수 있으며, 또한 여러처리를 순차적이 아닌, 동시(병렬)로 수행할 수 있다.

 

 

Unity에서 예를 들면, Fade-in / Fade-out 방식의 화면이 점차 어두워지면 전환되는 기능을 구현하기 위해서는 코루틴이 필수적이다. 

아래와 같이 FadeImage의 alpha값을 for문을 돌려 0까지 낮추어준다 할때, for문에 대기를 주지 않는다면 시작과 동시에 alpha값이 0이되어 확인할 수 없을것이다. 이때 대기를 주기위해 코루틴을 사용할 수 있다.

 

일반적인 함수는 함수가 발동이 되었을떄, 첫번째-> 마지막 라인까지 도달해야지 종료된다.

반면 코루틴은 ienumerate라는 타입을 반환하는 함수로서 사용하게 된다.  

IEnemerator Coroutine(){

// A 수행

yield return;  //-> 대기 수행 ( 대기시간동안은 코드밖으로 빠져나와 있음 )

// B 수행
}

 


그럼 기존의 코드와 코루틴을 사용한 케이스를 비교해 보자.

기존코드

 void FadeIn()
    {
        Color startColor = fadeImage.color;

        for(int i=0; i<100; i++)
        {
            //alpha : 1.0 ~ 0.0 (255~0)
            startColor.a = startColor.a - 0.01f;
            Debug.Log(startColor.a);
            fadeImage.color = startColor;
        }
    }

 

코루틴 사용시

IEnumerator FadeIn()
    {
        Color startColor = fadeImage.color;

        for(int i=0; i<100; i++)
        {
            //alpha : 1.0 ~ 0.0 (255~0)
            startColor.a = startColor.a - 0.01f;
            fadeImage.color = startColor;
            yield return new WaitForSeconds(0.01f); // 0.01의 대기시간을 둠으로서 1초동안 100번의 loop수행
        }
    }

위와 같이 일반적으로 코루틴은 for,while문과 같은 반복문과 사용하면 좋은 효과를 볼수있다. 

-> 코루틴의 첫번째 특징 : 대기시간을 가진다. 

 


코루틴 수행방식


-> 코루틴의 두번째 특징 : 비동기 방식

 

만약 코루틴을 동시에 2개 수행시킨다면?

위와 같이 코루틴을 Start()와 동시에 수행시킨다면, 코드는 기본적으로 위->아래로 수행되기에, HelloUnity -> HelloCoroutine1 -> End라고 예상을 했지만, 코루틴의 비동기 동작방식으로 인하여 아래와 같이 수행된다.

 

기본적으로 함수는 return을 이용하여 수행을 완료하였을때 Sync가 맞추어져, 각 함수간작동을 하게 된다 -> '동기방식'

but, 코루틴의 경우 작업완료와 동시에 다음 작업이 수행되는것이 아니라, 각 프로세스의 시작만이 순차적으로 이루어지게되는 Async 방식으로 수행된다 -> '비동기방식' 

 

<결론>

-> 처리중간에 대기시간을 설정할 수 있다.

-> 여러개의 코루틴을 동시에 처리할 수 있다. (병렬처리)


 

728x90

'Unity' 카테고리의 다른 글

Property [ Unity ]  (0) 2022.07.11
Override [ Unity ]  (0) 2022.07.11
싱글톤 패턴 / 지연생성 [ Unity ]  (0) 2022.07.07
리스트 [ Unity ]  (0) 2022.07.07
인스턴스 [ Unity ]  (0) 2022.07.07