Game Development/프로젝트: 루

유니티) 루 1.5.9버전 업데이트 및 최적화 작업, IL2CPP빌드

3영2 2019. 1. 18. 21:31
반응형

루 1.5.9버전 업데이트 및 최적화 작업, IL2CPP빌드


이번에 Lu 를 1.5.9버전으로 업데이트하면서 최적화 중심으로 작업을 진행하였다.

최적화 작업을 이전에도 여러번 했는데도 불구하고 최적화 작업은 항상 할게 많다...


이번 업데이트는 외관상 큰 변화는 없지만 퍼포먼스는 조금더 개선됬다고 생각한다.


1) 게임플레이 개선, 수정 사항


Planet Monster AI수정: 기존에는 중앙에 고정시켰는데 어색해 보여서 움직이게끔 바꿨다.

초반에 보스가 스폰될때 Dissolve효과가 있다.

우측상단에 FPS 표시





2) Editor Log활용: Apk 용량 줄이기


Console창 구석에 있는 아이콘을 오른쪽 클린하면 Open Editor Log라는 창이 있다.

이 창을 열면 Text형식의 Log창이 뜬다.



그리고 프로젝트를 빌드 후 Editor Log창을 클릭하면 Log내용에서 Build Report을 확인할 수 있다. 

(꼭 빌드 후에 해야지 Build Report Log가 남는다)


여기서 자신의 프로젝트가 어느 부분에서 용량을 차지하는지 확인 할 수있다. 

대부분 프로젝트가 그렇듯이 용량을 가장 많이 자치하는 부분 중 하나는 텍스쳐일것이다.

내 프로젝트도 가장 용량을 많이 차지한 부분이 텍스처이다



사진을 보면 알 수 있듯이 Particle Effect에 들어가는 Texture그리고 보스몹에 들어가는 tga형식의 Texture가 지나치게 높은것을 확인 할 수 있다. 이걸 최적화하면 된다.

최적화하는 가장 쉬운 방법 중 하나는 Unity가 제공하는 기능중 하나인 Texture Compression 기능이다.



Texture를 Compress 하게 되면 용량이 많이 줄어든다.

참고로 Texture를 Compress하려면 Texture파일이 높이와 폭이 4^n꼴이어야한다 ex) 512x512, 1024x512 등등

그렇기 때문에 만약 Texture사이즈가 4^n꼴이 아니면 이것부터 수정하는 작업을 해야한다. 

(참고로 Texture크기를 수정하면 Texture를 사용하고 있는 GameObject도 같이 바뀌기 때문에 꼭 확인해야한다)

(또 지나치게 Compress를 많이하면 Texture가 Blur하게 보이기 때문에 적절한 수치를 찾아야한다)

(Font도 용량을 은근히 많이 먹는다. 종류가 다른 Font가 지나치게 많이 사용되면 APK 용량이 커질수 있다는걸 알 수 있다...)


아무튼 Texture의 크기를 수정하고 적절하게 Compress해주면 


용량이 확 줄어든다! 

내 프로젝트는 62MB -> 46MB으로 줄어들었다



3) IL2CPP빌드


IL2CPP이란 말그대로 IL(Intermediate Language, 중간어) 를 CPP(c++)로 바꿔주는 빌드이다.

더 자세한 내용은 다음 링크에서 보면 된다.

https://blogs.unity3d.com/kr/2015/09/22/kr-csharp-compile-il2cpp/


IL2CPP빌드를 왜 하냐? 여러가지 이유가 있지만 

유니티 공식 문서에 따르면 

 IL2CPP는 Unity 프로젝트의 성능, 보안 및 플랫폼 호환성을 개선하는 등의 용도로 사용됩니다. "

라고 한다...


APK를 크랙할때 크랙프로그램을 통해 프로젝트를 뜯을 수 있는데 

IL로 빌드된 APK같은 경우 보안에 최약하다고 한다. 

쉽게 뜯기고 코드도 쉽게 찾을 수 있다고 한다...

하지만 IL2CPP로 빌드하면 뜯어도 알아보기 힘든 형태로 있기때문에 크랙하기 더 복잡하다고 한다. 

유명한 게임아니면 시간투자해서 크랙하는것 자체가 시간낭비기 때문에

IL2CPP로 빌드하는것 자체가 나름 보안을 강화하는 역할을 한다.


내 프로젝트는 자체가 작음에도 불구하고

빌드시간이 IL2CPP로 10분정도 걸린것 같다. (Mono로 했을때 2분)

(참고로 빌드한 컴퓨터 사양이 낮다. 그래서 더 오래걸린 것도 있다 

컴퓨터 사양 : i3 4179, gtx960,  ram 8g)

규모가 정말 크다면 빌드하는데 몇시간 걸리지 않을까 싶다. 

추가) 처음 IL2CPP빌드했을때 10분정도 걸렸지만 그 이후에 다시 한번 빌드하니 3분정도 걸린것 같다


현재 이 프로젝트가 원래 무겁지 않은 탓인지 Mono이나 IL2CPP로 빌드 했을때 플레이어가 느끼는 성능차이는 없다고 생각이든다.

나름 현재 기준으로 오래된 기종인 갤럭시 S3에서도 큰 무리없이 돌아갈 정도로 프로젝트가 가볍기 때문이다.

그래서 IL2CPP가 내 프로젝트에 큰 의미가 있을까 싶었지만 이것보다 큰 프로젝트에서는 성능의 차이를 느낄 수 있을 것이다.

그나마 내 프로젝트에서는 체감되는 부분은 UI를 다룰때 살짝(?) 차이가 있다.

현재 Dotween 이라는 에셋을 사용하여 UI Tweening동작을 하고 있는데 게임이 처음 로딩된 후 초반에 부드럽게 Tweening이 이루어지지 않고 프레임드랍이 조금씩 발생했다. 하지만 이번에 IL2CPP로 빌드한 후에는 초반에도 부드럽게 Tweening동작이 이루어진다.





반응형