코루틴을 사용하여 캐릭터 등장하는 A코루틴을 생성하였다.
그리고 이렇게 배치하였다.
StartCoroutine(A());
NextFunc();
그러나 그 코루틴이 종료되기 전에 NextFunc() 가 실행되었다.
이는 A코루틴은 비동기 방식으로,
A코루틴의 작업 완료를 기다리지 않고 메인 루프나 다음 작업들도 순차적으로 처리하기 때문
결국 나는 A코루틴이 종료될 때까지 기다리는,
마치 유사 동기방식으로 프로그램을 짜고 싶은 것이기에
A코루틴을 감싸주는 B코루틴과, A코루틴의 작업 완료를 알 수 있는 플래그 변수를 생성하였다.
그래서 이렇게 구현
A코루틴()
{
시작;
플래그 온;
종료;
플래그 오프;
}
B코루틴()
{
플래그 오프를 기다림;
NextFunc();
종료;
}
실제로는 둘 다 비동기 처리를 하고 있지만,
플래그가 오프되어야 NextFunc() 가 실행되므로 마치 동기처럼 동작된다.
나는 다른 작업들에도 사용하기 위해 플래그 변수를 세팅하였지만,
일반적으로는 B코루틴을
B코루틴()
{
yield return StartCoroutine(A코루틴());
NextFunc();
}
이렇게 짜주면 추가 변수 없이도 처리할 수 있다.