IL2CPP
유니티는 유니티의 엔진이 기반이 되고 별도의 레이어에서 스크립트가 실행됨
그리고 컴파일을 하면 DLL 파일로 나오게 됨
유니티의 엔진에 더 가까운 부분의 기능을 컨트롤하려면
엔진에서 허용이 필요해짐
C++과 비교해서 C#은 매우 복잡한 과정을 거쳐야 함
바로 기계어로 컴파일된 C++ 프로그램들은 실행이 훨씬 빠르기 때문에
DLL을 C++로 빌드하는 방식
하지만 지원하지 않는 모듈도 있을 수 있으니
개발 도중 계속 빌드를 해서 오류가 발생하지 않도록 확인해줘야 함
실무에서는 젠킨스라는 오토 빌드 머신이 주기적으로 돌긴 하지만
자주 빌드 해주는 습관도 중요
배칭
배칭의 종류는 다이내믹 배칭, 스태틱 배칭이 있다
렌더대상을 하나씩 다 드로우 콜 하는 것이 아니라
쉐어드 메테리얼을 배칭 시켜서 한 번에 화면에 찍어 성능 향상을 하는 것
폴리곤 작은 것들을 모아서 한 번에 찍는 것이 다이내믹 배칭
배경과 같은 스태틱 종류를 한번에 찍는 것이 스태틱 배칭
그런데 배칭을 통해 한번에 찍는데 GPU는 성능이 향상되지만
그만큼 CPU를 사용하게 되어서 무조건 좋지는 않음
드로우 콜이 많이 높은 경우 배칭을 테스트해 보는 것이 좋고
CPU의 상태에 따라 선택을 하면 됨
메쉬 압축
폴리곤은 정점의 집합이고 이를 압축하는 방식
프로파일러
유니티에서 제공하는 매 프레임마다 CPU와 GPU 등의 상태를 확인할 수 있는 기능
GC
더 이상 참조 하지 않고 쓰레기 메모리들을 GC가 알아서 수집하고 자동으로 해제해 주는 기능
프로파일러를 보다 보면 순간적으로 GC 때문에 성능이 하락하거나 게임이 끊기는 경우가 발생하기에
GC를 줄이기 위한 다양한 기법을 숙지해서 활용하는 것이 중요
오브젝트 풀링
미리 생성해 놓고 필요할 때 꺼내서 사용하고 Destory 하는 것이 아닌
꺼놓고 다시 필요하면 켜고를 반복하는 작업
Depth가 큰 오브젝트는 부하를 받는 경우도 있기에
인스턴스를 하는 것과 성능을 비교해서 풀링을 선택하면 됨
유니티의 최적화 노하우가 많이 쌓였기 때문에
유니티 매뉴얼과 최적화 옵션들을 반드시 숙지하는 것이 중요하다