Menu
CoddyTech

오브젝트를 풀링하는 이유

Coddy Unity 여정의 Unity 게임 아키텍처 섹션에 포함된 레슨. 50개 중 37번째.

초당 10발을 발사하는 총은 1분 동안 Instantiate를 600번, Destroy를 600번 호출합니다. Instantiate를 호출할 때마다 프리팹과 모든 구성 요소가 복사되고, 각 구성 요소의 Awake, OnEnable, Start가 실행됩니다. Destroy를 호출할 때마다 OnDisable과 OnDestroy가 실행되고, 객체의 메모리는 가비지로 남습니다. C#의 가비지 컬렉터가 나중에 이 메모리를 해제하는데, 일부 프레임에서만 작업이 수행되어 끊김 현상이 발생하며, 성능이 낮은 휴대폰에서 특히 심합니다.

풀은 객체를 파괴하는 대신 보관합니다. 다 쓴 총알은 SetActive(false)로 비활성화하여 풀로 돌아갑니다. 다음 발사 때 풀에서 하나를 꺼내 활성화하며, 풀이 비었을 때만 Instantiate가 실행됩니다. 처음 몇 초 동안 발사하고 나면 새 객체를 만들지 않고 가비지도 남기지 않습니다. 객체를 재사용할 때 Awake와 Start는 다시 실행되지 않습니다. 객체가 생성될 때 한 번 실행되었기 때문입니다. 타이머, 체력, 속도처럼 사용할 때마다 초기화해야 하는 항목은 OnEnable이나 객체를 풀에서 꺼내는 코드에서 초기화합니다.

풀링은 총알, 불꽃, 피해량 표시, 웨이브 게임의 적처럼 자주 만들었다가 버리는 객체에 유용합니다. 한 번 나타나는 보스나 가끔 열리는 메뉴에는 유용하지 않습니다. 풀은 비활성 객체의 메모리를 계속 보유하므로, 적절한 개수만 유지하고 남는 객체는 해제합니다.

직접 해보기

이 레슨에는 코드 챌린지가 없습니다.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Unity 게임 아키텍처의 모든 레슨