- Today
- Total
프로그래밍 농장
코루틴 [ Unity ] 본문
코루틴
: 처리와 처리 사이에 대기를 삽입할 수 있으며, 또한 여러처리를 순차적이 아닌, 동시(병렬)로 수행할 수 있다.
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 방식으로 수행된다 -> '비동기방식'
<결론>
-> 처리중간에 대기시간을 설정할 수 있다.
-> 여러개의 코루틴을 동시에 처리할 수 있다. (병렬처리)
'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 |