C# 스크립트나 스크립트 언어로 작성된 코드를 실행 가능한 형태로 변환하는 컴파일러를 말한다.
주로 Mono와 IL2CPP가 제공된다.
JIT 컴파일 방식을 채택한 유니티의 기본 스크립팅 백엔드이다.
일반적인 닷넷 호환 언어 컴파일 과정과 유사하다.
프로그램이 실행되는 시점에 필요한 코드를 동적으로 네이티브 코드로 번역하기 때문에 초기 실행 속도는 느리지만 반복적으로 실행되는 코드는 최적화되어 성능이 향상된다.
에디터에서 플레이 모드로 실행할 때 기본적으로 사용된다.
AOT 컴파일 방식을 채택한 유니티의 스크립팅 백엔드이다.
실행 이전에 네이티브 코드로 컴파일하기 때문에 초기 실행 속도가 빠르고 메모리 사용량이 최적화되며, 또한 코드의 보안이 강화된다. (네이티브 언어이기 때문에 디컴파일에 안전)
그렇기 때문에 모바일 기기와 같이 제한된 자원을 가진 환경에서 효율적인 성능을 제공할 수 있다.
작동 방식
- Unity 스크립팅 API 코드를 일반 .NET DLL(관리되는 어셈블리)로 컴파일한다.
- 관리되는 바이트코드 스트리핑을 적용한다. 이 단계는 빌드된 게임의 크기를 크게 줄여준다.
- 모든 관리되는 어셈블리를 표준 C++ 코드로 전환한다.
- 생성된 C++ 코드와 IL2CPP의 런타임 부분을 네이티브 플랫폼 컴파일러로 컴파일한다.
- 대상 플랫폼에 따라 실행 가능한 파일이나 DLL에 코드를 연결한다.
빌드에서 사용되지 않는 코드를 추적하여 최종 빌드에서 제외하는 작업이다.
이를 통해 최종 빌드의 크기를 대폭 줄일 수 있다.
C# 스크립트를 IL 어셈블리로 컴파일한 다음 수행된다.
IL2CPP의 경우 IL 어셈블리를 C++로 컴파일하는 작업이 추가되는데, 스트리핑을 통해 코드를 줄이면 컴파일할 코드가 줄어들어 전체 빌드 시간이 단축된다. (위 작동 방식 2번 과정)
프로젝트의 코드를 정적으로 분석하여 도달 불가능한 부분을 제거하는데 리플렉션과 같이 동적인 코드가 제거되어 오작동을 일으킬 수 있다.
관리되는 스트리핑 레벨(Managed Stripping Level) 설정을 조절하여 스트리핑을 제어할 수 있다.
(Mono는 Disabled, IL2CPP는 Low가 기본값이다.)
자세한 내용은 Unity 메뉴얼 - 관리되는 코드 스트리핑 참고.