void Start()
{
StartCoroutine(blink(1));
}
IEnumerator blink(float duration)
{
while (true)
{
Debug.Log("0.5초마다 실행된다 헤헿");
yield return new WaitForSeconds(duration);
Debug.Log("0.5초 또 지났다 헤헿");
yield return new WaitForSeconds(duration);
}
}
//unity에서 1초마다 0.5초가 지났다고 구라치는 디버그.로그가 뜨도록 작성.

위의 사진을 예시로 스레드는 한가지의 과정을 쭈욱 하는것이기 때문에 프로그램이 구동중에 딜레이가 필요한 상황이 발생했을 경우 해당 스레드의 모든 프로그램이 같이 멈춰야 한다..
하지만 코루틴같은 경우는 딜레이가 필요한 상황이 발생했을 경우 그 시점에 필요한 시간이 될때까지 코루틴에서 실행하고자 하는 메소드를 스톱시키고 코루틴을 사용하는 메소드를 호출했던 다음 명령어를 수행한다.
이후 코루틴에서 요구했던 시간 타임이 지난 후 돌아오는 프레임에서 다음 메소드를 수행한다.

위의 그림처럼 업데이트문에 있는 함수와 메소드들을 매 프레임마다 모두 한번식 건들어 보면서 돌지만, 코루틴은 정의해놓은 시간 또는 조건이 충족되기 전까지는 해당 메소드를 진행하지 않고 호출했던 명령어의 다음 명령어를 실행시킨다. 그렇게 열심히 프레임마다 업데이트를 돌다가 코루틴의 조건이 충족하면 다시 다음 구문들을 진행한다..
그렇다 코루틴의 정체는 중단과 재개인것이다.
<예시>
public bool MoveNext()
{ *인덱스, 구문등 다음이동할 위치값 }
public int Cunnent => 커넷의 위치 범위와 초기화
public void Reset()
{ 코루틴 전체 실행시 이동할 위치 지정 }
yield return을 사용하여 서브루틴을 중단하며 다음 프레임워크에 따라 업데이트 이후 코루틴 메소드중 중단점 이후로 서브루틴을 재개한다.