본문 바로가기
Unity 게임 개발/Unity IL2CPP

유니티 성능향상 - IL2CPP 3: IL2CPP란?

by daisy0461 2022. 4. 1.

혹시 앞의 글을 읽지 않았다면

유니티 성능향상 - IL2CPP 2: mono, JIT방식, IL이란? - https://daisy0461.tistory.com/m/51

 

유니티 성능향상 - IL2CPP 2: mono, JIT방식, IL이란?

유니티 성능향상 - IL2CPP 1: C#과 C++의차이 - https://daisy0461.tistory.com/m/50 유니티 성능향상 - IL2CPP 1: C#과 C++의차이 유니티 성능 향상을 공부하다가 IL2CPP라는 것을 알게 되었다. 이 기능을 공부하..

daisy0461.tistory.com

읽고 오는 것이 이해하기 더 편할 것 같다.

https://youtu.be/-9X965jXrn8

해당 동영상을 기반으로 공부한 내용을 작성한다.

1, 2를 통해 긴 글을 적었는데 드디어 IL2CPP가 무엇인지 설명한다.
IL2CPP란 IL을 C++로 만들어주는 것이다. 앞에서 C#에서 IL로 바꾸는 과정은 기존에도 있는 과정이다. mono 컴파일러가 c#을 IL로 바꾸는 역할을 작업을 하고 Unity에서 제공하는 기능은 이 IL을 C++로 변환해주는 단계를 추가한 것이다. C++로 만들어주면 Android와 아이폰에서도 돌릴 수 있다. 아이폰 같은 경우는 Obj-C라는 C가존재한다. 애플 제품군은 C가 돌아가기 때문에 Obj-C에서 C의바인드를 제공해서 애초에 C or C++을 돌릴 수 있다. Anroid의 경우 java를사용하는 것으로 대부분 알고 있을텐데 이는 vertual machine에서 java를 돌리기 때문에 내부는 native하다. 그래서 android의 경우 NDK(Native Develope Kit)를 제공한다. NDK는 Native언어로 개발할 수 있는 Kit이라고 보면 된다.

C++로벼놘이 되면 NDK를 통해 android에서 C++을 사용할 수 있다. 그렇기 때문에 C++로 변환할 수 있으면 굉장히 다양한 플랫폼에서 멀티 플랫폼을 유지하면서 속도도 빠르게 즉 성능을 향상시켜서 할 수 있다.

변환 과정

C# -> moon C# Compiler -> IL -> il2cpp.exe -> (C++) -> 멀티 플랫폼(ex. Emscripten, Xcode 등)


C# Script를 mono C# Compiler를 통해 IL로 변환 후 IL을 il2cpp를 통해 C++로 변환해서 다양한 플랫폼에서 좋은 성능으로 사용할 수 있다.

결론적으로 우리가 C#으로 작성하면 이 C#이 IL로 바뀌고 이 IL은 mono Framework상에 띄우면 JIT이라는 개념이다. Android나 아이폰에 빌드하기 전에 저같은 경우는 유니티 ‘에디터’에서 작업을 하게 되는데 이때 유니티 에디터는 JIT방식으로 돌아간다.
우리가 빌드할 때 IL2CPP를 백엔드로 빌드하면 C# -> IL -> C++ 단계로 변환을 하고 미리 컴파일 하는 방식인 AOT방식을 사용한다. 즉, 에디터는 JIT방식을 사용하고 Target device(android, ios)는 AOT방식을 사용한다.

개발할때는 JIT방식을 사용해서 생산성을 높이고 최종적으로는 AOT방식을 선택해서 성능적 이득도 챙기게 된다. 이렇게 두가지를 다 잡을 수 있는 방식이 현재 방식이다.