게임을 플레이하다 보면 이런 경험이 있습니다.
“FPS는 잘 나오는데 가끔씩 화면이 끊긴다”
평균 프레임은 괜찮은데, 순간적으로 툭 끊기는 느낌이 드는 경우입니다.
이 문제의 대표적인 원인 중 하나가 바로 유니티 GC (가비지 컬렉션)입니다.
👉 GC는 편리한 기능이지만, 실행되는 순간 프레임 드랍을 만들 수 있습니다.
유니티 GC란 무엇인가
유니티는 C# 기반 엔진이기 때문에 자동 메모리 관리 시스템인 GC를 사용합니다.
GC는 더 이상 사용되지 않는 객체를 자동으로 정리해주는 기능입니다.
개발자가 직접 메모리를 해제하지 않아도 되기 때문에 매우 편리합니다.
하지만 문제가 있습니다.
👉 GC가 실행되는 순간, 메인 스레드가 멈출 수 있습니다.
이때 플레이어 입장에서는 “끊김”으로 느껴집니다.
왜 GC가 프레임 드랍을 만드는가

👉 GC는 눈에 보이지 않지만, 실제 플레이 경험에는 큰 영향을 줍니다.
일반적인 프레임 흐름은 일정합니다.
프레임 → 프레임 → 프레임 → 프레임
하지만 GC가 발생하면 흐름이 이렇게 바뀝니다.
프레임 → 프레임 → GC 실행 (정지) → 프레임
이 짧은 멈춤이 바로 체감되는 끊김입니다.
👉 FPS 평균보다 중요한 것은 “프레임 안정성”입니다.
GC가 자주 발생하는 이유
GC는 메모리 할당이 누적될수록 발생합니다.
특히 다음과 같은 상황에서 자주 발생합니다.
- Update에서 new 객체 생성
- string 연산 반복
- LINQ 사용
- 박싱(Boxing) 발생
- 불필요한 배열 생성
이러한 작은 할당이 쌓이면 GC가 실행됩니다.
👉 문제는 “한 번의 큰 할당”이 아니라 “작은 할당의 반복”입니다.
유니티 GC 문제의 핵심
GC 자체는 나쁜 기능이 아닙니다.
문제는 “언제 실행되느냐”입니다.
- 게임 플레이 중 GC 발생 → 문제
- 로딩 화면 중 GC 발생 → 괜찮음
👉 결국 핵심은 GC 발생 타이밍을 제어하는 것입니다.
정리
- 유니티 GC는 자동 메모리 관리 시스템
- GC 실행 시 프레임 드랍 발생 가능
- 작은 메모리 할당이 쌓이면 GC 발생
- 핵심은 GC 발생을 줄이고 타이밍을 관리하는 것
👉 GC를 이해하면 “이유 없는 끊김”을 해결할 수 있습니다.
다음 글에서 다룰 내용
다음 글에서는 GC가 실제로 어떻게 동작하는지 내부 구조를 설명합니다.
👉 유니티 가비지 컬렉션 동작 원리 (Managed Heap, Mark & Sweep)