[ 참고 데이터 ]
[ 정리 ]
Coroutine
단일 쓰레드지만 마치 멀티 쓰레드처럼 동작(비선점형 멀티 쓰레드와 유사)
Tip : 비선점형 멀티쓰레드는 버그로 인한 무한 루프 등의 문제가 발생할 수 있으나, Unity에서는 StartCoroutine내의 Loop문에 yield가 없으면 컴파일 에러를 발생시키므로 무한 루프에 빠지는 것을 미연에 방지함
C#이 아닌 Java Script는 StartCoroutine()을 적어주지 않아도 자동으로 인식하게 해줌
yield : 어떤 서브 루틴을 실행 하다가 yield를 만나면 서브루틴 실행을 잠시 보류하고 서브루틴을 빠져 나온다. 그리고 이 서브루틴을 호출했던 부모 서브루틴의 다음 라인을 실행한다. 그런 다음 게임 루프상에서 다음 턴이 오면 보류했던 위치 부터 실행을 재계한다.
yield return .. ; : 실제 리턴되서 종료되는 것이 아니라 다음 턴으로 넘긴다. 즉, 다음 턴에 다음 라인을 실행함
yield return new WaitForSecond(XX) : 일단 턴을 넘긴 다음 지정된 시간(XX) 이후에 다시 돌아와 다음 라인을 수행함
yield return StartCoroutine(....) : StartCoroutine으로 실행시킨 함수가 종료된 이후 되돌아와서 진행됨.
yield break; 다음 라인으로 돌아 오지 않고 정말 종료됨
Unity3D에서 C# Script로 FSM(Finite State Machine) 구현
Coroutine을 이용 : http://mingu.kr/80 / http://rapapa.net/?p=3211
Coroutine의 사용 예
캐릭터에 fade out 효과를 줄 경우
render.material.color.a -= 0.1 : 알파값을 1에서 0으로 서서히 줄여 줘야 함
일정한 범위 내의 적들이 특정 사정 거리에 들어 왔는지를 체크할 경우
Update()에서 하는 경우 너무 많은 체크를 하게 되는데, yield를 사용할 경우 적당하게 줄일 수 있음