Coroutine
yield
yield return object;
object <- 이 대상을 IEnumerator 객체의 current 값과 비교한다.
위 그림과 같은 동작을 코드로 나타냄
MonoBehaviour.StopCoroutine
코루틴 실행을 중지하기 위해서는 다음과 같은 방법이 있다.
public void StopCoroutine(string methodName);
- public void StopCoroutine(IEnumerator routine);
- public void StopCoroutine(Coroutine routine);
- public void StopAllCoroutines(); // 현재 클래스에서 실행한 모든 코루틴 종료
코루틴이 반복될 때 (타이머 설정과 같이) 종료지점이 내부에 포함되어 있지 않은 경우,
무한 루프가 되기 때문에 중지가 필요한 시점에서 StopCoroutine()으로 해당 코루틴을 종료한다고 말해줘야 한다.
하지만 IEnumerator 참조명으로 코루틴이 실행된 경우 또는 파라미터가 포함되어 있는 경우에는 StopCoroutine() 사용이 불가하다.
어떤 코루틴을 중지할 것인지 정보가 명확하지 않기 때문이다.
그럴경우 중지가 예정된 코루틴 개체에 대한 IEnumerator 타입의 참조 변수를 선언하여 StopCoroutine(참조 변수) 해줘야 한다.
유니티 공식 API Link: StopCoroutine
간단한 타이머 코루틴 예시
new WaitforSeonds 는 디바이스 환경에 종속적이므로 프레임 구간마다 예상하는 정확한 시간을 보장해주지 않는다.
모든 클라이언트에게 공평한 환경을 제공해주기 위해선 Time.deltaTime 를 사용하여 일정 시간 경과 이후 yield return null로 턴을 마치는 루프문을 작성하는게 좋다.
여기서는 WaitforSecondsRealtime를 사용하였다.
lerp 와 자주 쓰이는 코루틴 방식
'UnityEngine > Editor 시스템' 카테고리의 다른 글
Unity 실행 순서 (0) | 2018.06.05 |
---|