유니티

[유니티 최적화] Profiling (빌드 이후 메모리 사용량 등 확인 하기.)

yamaeking 2025. 4. 17. 22:34

에디터에서는 무리 없이 잘 작동되는 거 같은데, 안드로이드로 빌드만 하면 뭔가 버벅거리는 느낌이 나서 이걸 어떻게 찾아서 분석해야 하나 싶었다. 다행히 유니티에서는 profiling 기능을 제공하고 있는데, 이걸 통해서 대략적으로 내가 만든(만들고 있는) 게임이 어떤 식으로 돌아가고 있는지 확인해 볼 수 있다.

 

 

<빌드 프로파일에서 Autoconnect 체크>

 > 위에서와 같이 build profile 세팅화면에서 'Autoconnect Profiler'를 체크하고 빌드를 해준다.

 

 

<빌드 이후 apk 파일 실행하기>

 

> 빌드하고 나면 저렇게 apk 파일이 생성 되는데 (안드로이드 기준), 나는 블루스택(폰게임 컴퓨터로 할 때 쓰는 프로그램이라고 보면 됨.)이라는 프로그램을 이용하여서 게임을 실행하였다. 게임을 실행한 상태에서 유니티 에디터로 돌아와 보면 아래와 같이 콘솔 창에 Autoconnected Player~~ 어쩌고 하는 것을 볼 수 있다. 이러면 성공적으로 연결이 된 것이다.

 

 

 

<Profiling 하기>

> 유니티 에디터에서 'Windows -> Analysis -> Profiler 를 눌러준다.

 

 

> 실행하면 위와 같이 게임의 상태에 대한 Profiling 이 실시간으로 쭈우욱 업데이트 된다.

> 멈춘 상태로 특정 시점의 프로파일링 정보를 보고 싶으면 위에 보이는 아이콘을 클릭해주면 된다. 

 

 

> 본인의 경우, 인벤토리 클릭하였을 때 인벤토리 UI 나타나는 부분이 뭔가 렉이 많이 걸리는 것 같아서 이 부분을 확인해 보기 위해 정지한 상태로 살펴 보았다. (위에서 화살표로 가리키는 부분을 보면 spike가 튀었는데, 이 부분이 인벤토리 열 때 발생한 부하라고 볼 수 있겠다.)

 

 

> 잘 보일지 모르겠는데, 인벤토리를 누를 때 840ms 정도의 지연이 생긴다. 즉 거의 1초 가까운 시간이 지연된 것인데, 이정도의 지연 시간이면 사실상 일시적으로 프리즈 된 것이나 다를 바 없다. 좀 더 상세하게 보기 위해 가장 많은 시간을 차지하는 PlayerLoop을 클릭하여 show -> hierachy 를 누르니 아래와 같은 상세창이 나왔다.

 

> 여기서 다시 많이 차지하는 부분을 타고 내려가면서 살펴보니,, GameObject를 activate 하는데 대부분의 부하를 차지하는 것을 확인해 볼 수 있었다. 이 부분을 어떻게든 코드를 수정하여서 고쳐야 할 것 같다.

 

 


 처음에는 텍스쳐 크기가 커서 그런가? 싶었는데 프로파일링을 통해서 확인해 보니 인벤토리 클릭할 때 실행되는 로직 때문에 부하가 많이 생기는 것 같다. Slot들은 풀링하고 있으나, 인벤토리를 클릭할 때마다 Slot들을 싹다 지우고 다시 MaxSlot만큼 만들어 내고 있는데 이 부분이 문제인 것 같다. 인벤토리를 처음 클릭하였을 때만 Slot들을 생성하고, 그 이후에 클릭할 때는 기존에 생성해놓은 Slot들을 재활용하는 형태로 코드를 수정하든가 해야겠다.

 

 

아무튼 Profiling 을 하게 되면 좀 더 명확하게 어떤 부분이 문제인지 알 수가 있다!