2014년 4월 9일 수요일

Unite Korea 2014 1 Session - 코루틴 깊이 알고 재미있게 쓰기

- 스킬트리랩 :: 이득우

코루틴 깊이 알고 재미있게 쓰기

프롤로그
- 예전에 한건 안할 겁니다...
- 그래서 선택한게 스크립팅 시스템 중에 고른 것이 코루틴
- 코루틴에 대해서 정리해보자

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# 깊이 안파도 유니티에 좋은 기능이 많습니다.
   - 유니티 엔진이 당신을 이끌어줄 리더로 생각하고 맞추세요..편해요
   - 정보 공유 활성화 합시다.

댓글 없음:

댓글 쓰기