어제 잠깐 30줄짜리로 짧게 구현해서 올렸었는데
많은 분들이 아이디어를 주셔서 대충 정리가 된거 같습니다. ( 160줄이 되버렸...! )
약간 소개를 하면 차례대로 실행되어야할 코루틴이 c1,c2,c3이 있다고 가정합니다.
다음과 같이 적으면 되겠죠?
타자치기 넘나 귀찮은 것...
chain으로 이어보면 어떨까 싶어서 만들었습니다.
다음과 같이 줄여집니다.
필요하다 싶은건 이것저것 만들어 놨습니다. 예제를 보면 다음과 같습니다.
test1이 실행되면 끝나면 middle of chaining이 출력되고
1초 기다린 다음에 test1 test2 test3이 차례대로 실행되고
test1 test2 test3이 동시에 다시 실행됩니다.
동시에 실행된 3개의 코루틴이 모두 끝나면 Complete가 출력됩니다.
오버로딩된 함수를 전부 적을려니 좀 예제가 난잡한거 같네요 ㅋ;
gist
https://gist.github.com/geniikw/071463c491eee975c863a9163c9dcf69
unity forum
https://forum.unity3d.com/threads/simple-coroutinechaining-idea.466966/
*유니티 포럼을 처음써봤는데 알람기능이 있더군요. ㅇㅅㅇ 여기에 뭔가 적으시면 바로 알 수 있습니다.
*일단 전부 등록한다음에 각자의 코루틴이 각 체인을 기다리는 식으로 구현했습니다. 이걸 고치거나 해야될거 같은데...
딱히 생각나는 방법이 없네요.
* 추가설명 바로 위에말에 추가설명을 붙이면
가독성과 아주 조금(?)~~의 성능을 trade off 했다고 생각하시면 됩니다.
일반적으로 처음 코드는 유니티 스케쥴러에
1개의 코루틴만 추가되고 끝나면 다른게 추가되고 하지만
한꺼번에 3개의 코루틴이 추가되고 다른 두개의 코루틴은 다른 코루틴이 끝날때까지 기다리는 식으로 구현했습니다.
아직까지 코루틴을 많이 등록해서 성능이슈가 난 경우는 본적이 없는데 뭐, 일단은 알아두시는게 좋을것 같아서 적어 놓습니다.
* 코루틴을 사용하면 GC에도 조금 쌓이는 등의 성능이슈가 있긴한데 UniRx에 포함되어 있는 MicroCoroutine을 사용하면
해결될 문제일 것 같습니다.
마이크로코루틴으로 만들어보니 문제가 생기는군요. 일단 보류