- 스킬트리랩 :: 이득우
코루틴 깊이 알고 재미있게 쓰기
프롤로그
- 예전에 한건 안할 겁니다...
- 그래서 선택한게 스크립팅 시스템 중에 고른 것이 코루틴
- 코루틴에 대해서 정리해보자
1. 유니티가 스크립트를 관리하는 방법
- 모노디밸롭에서 스크립트 파일을 변경
- 에디터에서 스크립트 파일 변경을 감지한 후 컴파일
- 유니티의 컴파일 하면 bin 폴더 밑에 위치한 mono.exe 컴파일러 실행
- 단지 파일이름으로 컴포넌트를 저장하는 용도로 프로젝트 뷰를 사용
- 컴파일이 수행되면 각기 다른 dll이 생성된다.
- firstPass 폴더에 놓으면 공용 라이브러리 용도로 활용
- Editor 는 필드시 제외
유니티는 컴파일 이외에도 스크립트 분석 , 컴포넌트별 정보 기록
룩업 테이블에 정보를 저장함. Key Value 형태로 저장
예약 함수들은 특별 관리 한다. ( Ex) Awake , Start , Update.. etc)
- 예약 함수중 몇몇은 컴파일 과정에서 추가 검사를 한다. (혹시 예약함수를 쓴건지..)
즉, 유니티는 2단계로 나누어져서 (컴파일 + 관리단계) 로 진행하는 것 확인 가능
내부 관리 방법 :: MonoScriptCache
Key 를 String 으로 저장하고 그 Key를 찾아서 함수를 호출한다.
SendMessage 그.....렇,....게 느..리..지는 않아요..
2. 코루틴이란?
일반적인 의미
-진입 지점이 여러개인 함수
코루틴 = 협동 루틴
- 나를 호출하는 애와 데이터 주고받는 협동하는 메카니즘
유니티에서 코루틴
- IEnumerator 인터페이스를 반환하는 함수
유니티에서의 코루틴이란 스크립트와 엔진의 협동 관계
주는 사람 (프로그래머) --> 받는 사람 (유니티 엔진)
코루틴이 실행하는 과정
스크립트에서 코루틴 시작 -> 엔진은 yeild 구문 하나 달라고 한다(최소 1개 필요)
-> 검사 후 다음 꺼 호출 -> 그다음 꺼 전달 -> 전달 대기
코루틴의 분류
- 플래그 설정 류
: 랜더링 루프에서 플래그를 체크하고 실행
- 콜백 호출 류
: 코루틴을 저장해두었다가 작업이 끝나면 호출
코루틴 수납함
- 코루틴 매니저가 관리하는 일을 표현
- 각종 코루틴들로부터 받은 것들이 모여 있음
유니티 엔진의 역할은 ?
- 매 프레임마다 매니저에게 물어 봄
- 조건이 만족했는지에 따라 MoveNext 를 호출하기 때문에
Script Execution Order와는 무관하게 동작한다.
결론
- 쓰레드는 아니고... 신종 기법도 아니고...
- 특정 물체들의 목록을 받기 위한 용도보다 더 많은 기능을 갖고 있다.
- 뭐 그렇게 특별하지는 않다..
3. 코루틴의 활용
- 보는 사람들을 생각하자
- C# 의 객체지향 기능들은 적당히..람다나..린큐 이런건 쫌..
- C# 의 제너릭, Reflection 은 코드를 줄이는 데 큰 도움이 된다.
- 너무 많은 고급 문법의 남발은 보는 사람들의 머리를 아프게 함
- AOT방식의 iOS에서는 고급기능들의 무분별한 사용은 위험할 수 있음(Reflection..)
- 유니티의 기능을 최대한 활용하자
* 유니티 안에 다른 유니티를 만들지는 맙시다...
비극은.. 실행 순서를 제대로 몰라서 시작된다....
4. 유니티 코루틴의 특징
- 문자열 호출 가능
- C# 의 모든 데이터는 String으로 변환
- 내부에 while문을 사용하여 무한 유지 가능
- 게임 오브젝트가 비활성화되면 자동으로 소멸
- 프레임 별로 호출 가능 (yield return null)
- 함수 중간에 대기 가능 (return StartCoroutine)
5. 장점
- 코드가 매우 간편
- 초기 플로우가 생소하지만 익숙해지면 생산력 급증
단점
- 디버깅이 힘듬
세션 결론
- C# 깊이 안파도 유니티에 좋은 기능이 많습니다.
- 유니티 엔진이 당신을 이끌어줄 리더로 생각하고 맞추세요..편해요
- 정보 공유 활성화 합시다.
댓글 없음:
댓글 쓰기