오늘 한 일
게임을 만들다보면 최적화는 무조건 필요로 하게 되어 있습니다.
게임을 최적화하지 않는다면 게임에도 찌꺼기들이 쌓이고 용량이 커질 수 있습니다.
그러면 unity의 최적화 방식에는 무엇이 있는지 알아봅시다.
렌더링(Rendering) 최적화
CPU → GPU로 보내는 호출 비용이 큼
오브젝트 많을수록 프레임 급감
Static Batching
Dynamic Batching
GPU Instancing
Mesh Combine
움직이지 않는 오브젝트
빌드 시 자동 병합
체크: GameObject → Static 체크
같은 Mesh + Material 반복 사용
Material → Enable GPU Instancing 체크
카메라에 안 보이는 오브젝트는 렌더링 X
Window → Rendering → Occlusion Culling
거리 따라 모델 품질 변경
LOD0 (근거리)
LOD1 (중거리)
LOD2 (원거리)
스크립트 / CPU 최적화
매 프레임 실행 → CPU 폭발
이벤트 기반
코루틴
Invoke / Timer
// X
void Update() { CheckSomething(); }
// o
void OnQuestUpdated() { CheckSomething(); }
GC 발생 시 프레임 드랍 (스파이크)
new
string +
LINQ
foreach (특정 상황)
객체 재사용
StringBuilder
캐싱
// x
void Update() {
GetComponent<Rigidbody>();
}
// o
void Awake() {
rb = GetComponent<Rigidbody>();
}
메모리 최적화
몬스터, 투사체, 이펙트
Instantiate / Destroy x
Pool Get / Return o
해상도 줄이기
압축 포맷 사용
Mobile: ETC / ASTC
PC: DXT5
필요할 때만 로드
메모리 절약 + 로딩 관리
물리(Physics) 최적화
Project Settings → Physics
충돌 필요 없는 레이어 끄기
물리 연산은 비쌈
필요 없는 Rigidbody 제거
Physics.Raycast x (Update)
UI 최적화
하나의 Canvas = 전체 재빌드
TopUI / HUD / Popup / WorldUI 분리
실시간 계산 비용 큼
고정 UI는 수동 배치
애니메이션 최적화
Animator Layer 최소화
Avatar Mask 사용
불필요한 IK 비활성화
씬 / 월드 구조 최적화
SceneManager.LoadScene("Map_01", LoadSceneMode.Additive);
거리 기반 활성화
멀면 Disable / Unload
가까우면 Enable / Load
프로파일링 도구
CPU / GPU / Memory / Rendering
Draw Call 분석
최종정리
“Unity 최적화는 렌더링, CPU, 메모리, 물리, UI 관점에서 진행하며
Draw Call 감소, Object Pooling, Update 최소화, GC 관리,
그리고 Profiler 기반 병목 분석이 핵심"