도파민조아 MYPI

도파민조아
접속 : 4421   Lv. 51

Category

Profile

Counter

  • 오늘 : 44 명
  • 전체 : 143328 명
  • Mypi Ver. 0.3.1 β
[Unity Engine] [Unity3D] CoroutineChain(0.1) 개발자 주의!! 일반인은 주의해서 피해가세욧. (4) 2017/04/21 AM 04:30

어제 잠깐 30줄짜리로 짧게 구현해서 올렸었는데

 

많은 분들이 아이디어를 주셔서 대충 정리가 된거 같습니다. ( 160줄이 되버렸...! )

 

약간 소개를 하면 차례대로 실행되어야할 코루틴이 c1,c2,c3이 있다고 가정합니다.

 

다음과 같이 적으면 되겠죠?

 

이미햨E019.png

 

타자치기 넘나 귀찮은 것... 

 

chain으로 이어보면 어떨까 싶어서 만들었습니다.

 

다음과 같이 줄여집니다.

이미햨E020.png

 

필요하다 싶은건 이것저것 만들어 놨습니다. 예제를 보면 다음과 같습니다.

 

이미햨E021.png

 

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을 사용하면

해결될 문제일 것 같습니다.

마이크로코루틴으로 만들어보니 문제가 생기는군요. 일단 보류

신고

 

지나주    친구신청

좋네요!

잘자염    친구신청

좋나요?!

non-oan    친구신청

오~ 좋네요.
사실 이걸보고 서버와 통신 코드에 쓰면 좋겠다라는 생각을 했습니다.
요청을 보내고 응답을 기다리는데 코루틴을 써서요.
패킷 타입별로 코루틴을 만들고 일련의 통신 과정을 체인으로 만들면 가독성이 좋을거 같네요.

잘자염    친구신청

주로 통신이나 IO에 많이 쓰죠~
X