데브허브 | DEVHUB | [Unite Seoul 2025] 효율적인 사내 Unity프로젝트 품질관리 전략과 최적화 사례[Unite Seoul 2025] 효율적인 사내 Unity프로젝트 품질관리 전략과 최적화 사례
- 게임 개발 리스크 증가에 대응하여 개발 생산성 향상을 위해 독립적인 '코어 기술 본부'와 '개발 추진실'을 설립하여 공통 기술 지원 및 품질 관리 전담. 📈
- 최적화는 프로젝트 후반에 중요성이 인지되는 경향이 있어, 선제적이고 자발적인 최적화 역량 강화를 목표로 'Unity Performance Tuning Bible' 전자 서적을 집필 및 공유. 📚
- 최적화 데이터 측정의 어려움(불안정한 환경, 수동 측정, 데이터 공유/비교 문제)을 해결하고자 자동화된 규격화 성능 측정 및 분석 툴 '카나리아(Canaria)' 라이브러리 개발. 🐦
- 카나리아는 CPU, 메모리 사용량, 메모리 누수 감지, 메모리 프로파일러 데이터, 스톱워치 기능 등을 웹 기반으로 제공하며, 실시간 알림 기능을 통해 품질 저하를 조기 감지. 📊
- 카나리아 구현 시 제품 성능에 영향을 주지 않도록 조건부 컴파일 및 IL 포스트 프로세서를 활용하여 더미 코드 또는 호출 자체를 제거하며, 유니티의
ProfilerRecorder 클래스를 활용하여 데이터 계측. ⚙️
- 주요 최적화 사례:
- 쉐이더 베리언트 로딩 설정(
Shader Variant Loading Settings) 조정을 통해 쉐이더 메모리 사용량을 1/5로 절감 (청크 사이즈/카운트 1 추천). 💾
- URP 쉐이더 스트리핑 및 명시적 키워드 제거,
Shader Variant Collection을 통해 불필요한 쉐이더 베리언트 빌드 포함 방지. ✂️
- 쉐이더 베리언트 키워드에 버텍스/프래그먼트 접미사 지정을 통해 메모리 절반 절약 가능. 🏷️
- 텍스처 스트리밍 기능을 활성화하여 카메라 위치에 따라 필요한 밉맵 레벨만 로드, 텍스처 메모리 대폭 절감. 🖼️
Application.backgroundLoadingPriority 조정을 통해 유니티 자원 로딩 속도를 초 단위로 단축 가능. ⚡
- 렌더 텍스처는 풀링 및 재사용, 포맷 일치, URP 스왑 버퍼 활용, RT 풀 캐패시티 조절 등으로 메모리 최적화. 🔄
Resources.UnloadUnusedAssets 호출 시점 및 C# 매니지드 참조 관리에 유의하여 메모리 누수 방지. 🗑️
UnityWebRequest 통신 시 NativeArray 또는 Span을 사용하여 내부 버퍼 복제 생략으로 성능 개선. 🌐
- SRP 배처가 깨지지 않도록 쉐이더, 머테리얼 프로퍼티 블록, 쉐이더 베리언트 등을 점검. 🧩
- 로딩 전략을 직렬이 아닌 병렬 처리, 프리로드, 필요한 부분만 로드하는 방식으로 수립하여 게임 체감 속도 향상. 🚀