본문 바로가기
Unity

UnityUnity 모바일 최적화: 꼭 알아야 할 핵심 개념 정리

by NightBreeze 2025. 9. 20.
반응형

모바일에서 Unity로 앱이나 게임을 만들다 보면 “점점 느려지는 것 같다”는 느낌을 받기 쉽습니다.

특히 기능이 쌓이고, 화면에 오브젝트가 많아질수록 프레임이 떨어지고 발열이 심해지죠.

이 글에서는 Unity URP(Universal Render Pipeline) 환경에서 자주 쓰이는 최적화 개념들을 한 번에 정리해보겠습니다.

 


 

🎯 1. FPS vs 프레임 타임

 

  • FPS(Frame Per Second): 1초에 그려지는 화면 수.
  • 프레임 타임(Frame Time): 한 프레임 처리 시간(ms).

 

👉 60FPS 목표 = 16.67ms, 30FPS 목표 = 33.33ms 이내 유지해야 안정적입니다.

프레임 타임이 들쭉날쭉하면 FPS가 높아도 “버벅임”이 느껴집니다.

 


 

⚙️ 2. 병목(Bottleneck) 구분

 

  • CPU 바운드: 스크립트, 물리, 드로우콜 관리가 병목.
  • GPU 바운드: 해상도, 쉐이더, 픽셀 처리, 포스트 프로세싱이 병목.

 

Unity Profiler에서 Main Thread / Render Thread / GPU 시간을 비교해 어디서 문제가 생기는지 확인해야 합니다.

 


 

🖼️ 3. 드로우콜(Draw Call) & 배칭(Batching)

 

  • 드로우콜: GPU에 “그려라”는 명령. 많을수록 성능 저하.
  • SetPass Call: 드로우콜 중 머티리얼/셰이더 변경이 일어나는 지점 → 더 무거움.
  • Batching: 여러 오브젝트를 묶어 한 번에 렌더링.
    • Static Batching: 고정된 오브젝트 병합
    • Dynamic Batching: 작은 메시 자동 병합
    • GPU Instancing: 같은 메시를 한 번에 여러 개 처리

 


 

🚀 4. SRP Batcher

 

URP에서 제공하는 최적화 기능.

동일 셰이더를 사용하는 객체들을 묶어서 CPU → GPU 전달 비용을 크게 줄여줍니다.

👉 URP Asset 설정에서 SRP Batcher 활성화는 필수!

 


 

🔲 5. 오버드로우(Overdraw)

 

같은 픽셀이 여러 번 그려지는 현상.

UI, 반투명 파티클, 풀스크린 이펙트에서 흔히 발생.

👉 UI Canvas 분리, 반투명 최소화, 파티클 최적화가 해법입니다.

 


 

🗑️ 6. GC(Garbage Collector)와 GC Alloc

 

  • GC: 메모리를 자동으로 정리하는 과정. 실행 시 순간 끊김 발생 가능.
  • GC Alloc: 프레임마다 새 메모리 할당. 많을수록 성능 저하.👉 해결: 오브젝트 풀링, StringBuilder, List.Clear() 재사용.
  • 👉 목표: 런타임에서 GC Alloc 0B/frame.

 


 

♻️ 7. 오브젝트 풀링(Object Pooling)

 

Instantiate/Destroy 반복은 GC 폭탄 💣

👉 풀에 미리 만들어두고 꺼내쓰고 돌려놓는 방식.

투사체, 이펙트, UI 팝업에 특히 필수입니다.

 


 

👁️ 8. LOD & 오클루전 컬링

 

  • LOD(Level of Detail): 멀리 있는 객체는 간단한 모델로 교체.
  • Occlusion Culling: 카메라에 보이지 않는 객체는 아예 렌더링 안 함.
  • 👉 많은 오브젝트가 있는 씬에서 GPU 최적화 핵심.

 


 

📐 9. Render Scale

 

URP의 렌더링 해상도 비율 조절 옵션.

1.0 = 원본 해상도, 0.8 = 80%로 그린 후 업스케일.

👉 고해상도 기기에서 성능 확보에 매우 효과적.

 


 

🔍 10. Profiler 체크리스트

 

  • CPU Usage: 스크립트/렌더/물리/애니메이션 시간
  • GPU Usage: 픽셀 처리, 쉐이더, 포스트 효과
  • Rendering 모듈: Batches, SetPass Calls, Triangles
  • Memory 모듈: GC Alloc, GC Heap, 사용 메모리 추세
  • Frame Time: 평균, 최대, 95% 구간

 

👉 **“측정 없이 최적화하지 말라”**는 게 핵심 원칙입니다.

 


 

✨ 마무리

 

Unity 최적화는 한 번에 다 하는 게 아니라,

 

  1. 목표 FPS/프레임 타임 설정 →
  2. Profiler로 병목 확인 →
  3. 필요한 부분부터 점진적으로 개선

 

이 흐름이 정석입니다.

 

작은 습관(빈 Update 없애기, 풀링 사용하기, 드로우콜 줄이기)만 지켜도 앱은 훨씬 가볍고 안정적으로 돌아갑니다.

반응형