티스토리 뷰

p.s 본 글은 공유보단 기록에 가깝습니다..! 그리고 의식의 흐름기법이라서.....이해가 안가실수도 있는데..

     이런식으로 생각했구나? 정도만 봐주시면 될거같아요


안녕하세요, 이더예요.. .너무 오랜만이죠 ><!!!!!!!!!!!!!!


는 개뿔 ㄹ 그동안 졸작하느냐고 바빴습니다...도 개뿔이고 Warp(한국산업기술대학교 게임공학부 소모임) 운영하다가 늦었어영..


여튼


이제는 자랑질 하나 하려고 글을 쓸꼐요..


그건 바로 유니티에 있는 코루틴 기능을 구현하는거였어요.!!!!!!!!!!!!!!!!!!!!!!!!


사실 유니티에 있는 코루틴은 완전한 Thread는 아니지만 Thread처럼 main loop와 별개로 따로 돈다고 알고 있었요.. 

( 이용희 교수님에 2015년 게임엔진 강의중에서..)


그리고 이 기능은 main loop와 따로 연산을 해줘도 되는 것들을 계산할떄 쓰인다고 하더라구여..

예를들어 FadeIn,Out 효과같은것들!!!!! 


그래서 이번엔 그걸 구현한걸 자랑질?이랄까 공유랄까.. 하려고합니당.. 그러 ㅁ시작


일단 완성본부터


[그림 1] 완성본



OpenGL 기반의 fadeout효과입니다.


 보이는 것처럼 도형들이 생길때마다 쓰레드 개수가 증가했다가 사라지는걸 확인할 수 있습니다..


어떻게 만들었을까요..?

(이건 샘플프로젝트로 만든게 아니라 어느정도 완성된 프레임워크에 넣은거예요)


일단 thread로 전역 함수를로 호출하는게 아니라 클래스 멤버함수를 호출할꺼예요.

(이에 대한 방법과 설명은 따로 구글링해서 알아보세요~)


[ 클래스 상속관계 ]  Componet(부모) - FadeOutScript(자식 클래스)


전 Componet라는 클래스를 만들어서 이걸 GameObject calss에 붙여서 GameObject를 사라지게 하는 방식으로 구현했기에 


Componet클래스 안에 Coroutine를 넣었습니다. 

( 클래스 이름이 Componet나 FadeOutScript는 상속관계이므로 이해하실 때 같은 클래스 멤버함수라고 생각하셔도 무방합니다.)


[그림 2] 코루틴 시작부분


네.. 이제 저 코루틴 스타트 부분을 시작하면되죠. 참고로 waitingTime은 안해주면 main Thread가 아닌 sub thread라서 mainThread FPS에 맞게 좀 대기 해주려는 거예요  


이제 오브젝트를 만들어볼까요..?

사실 이 부분에서 중요한건 오브젝트를 만드는 순간 StartCoroutine를 시작한다는거죠.. 

[그림 3] 오브젝트 생성 후 코루틴 시작


네.. 그럼 [그림 2] 에 있는 것처럼 Coroutine이 시작이 되겠죠? 그럼 코루틴 함수를 봅시다.



   [그림 4] Coroutine 함수

 *clor4f는 rgba를 가지고있는 변수랍니당


그래서 코루틴 함수가 시작하면  for문에서 작업을하고 끝날때 gameObject->active를 false로 만들었습니다.

그럼 나중에 [그림3]에보이는 m_lCorotineObject보이죠?? 저기서 삭제를해요..




[그림 5] remove_if


그리고 리스트에서 제거되기 직전에 CorotuineExit()라는 함수를 호출하는데 여기서 thread->join()을 실행합니다.

[그림 6] CoroutineExit


고로 끝..?


일단 주구장창 쓰긴했는데 흠..


중요한 것은 

[그림 2]에 잇는 클래스 멤버함수를 쓰레드로 돌리는 부분.

[그림4]에 있는 thread가 돌아가는 부분.                       

 [그림 6]에서 thread을 정상적으로 종료하는 부분. !        


  

   

보기 쉽게 정리한 코드를 올리고 끝낼께요

마지막 사진은 위에 올린 사진 이전에 만든걸로 좀 다를테지만 정리한게 있으면 좀 좋을테니~

(코루틴 시작이나 종료 부분은 부모클래스로 올려도 되는 부분이라서 위에 사진들이 바뀐거예요)

.. 

그럼 개떡같은 설명은 2만





'Programing > C++' 카테고리의 다른 글

C++17 FileSystem  (0) 2018.01.15
'17.05.12 Data Struct Sample Data  (0) 2017.05.11
어머.. SVN으로 커밋하다가 오류가 떴대...  (0) 2016.07.30
virtual 소멸자를 써야하는 이유!!!!!!  (0) 2016.07.11
인터페이스란!!!!!?  (1) 2016.07.08
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함