코스모스 공작소

Unity 오브젝트 풀로 탄환 관리 최적화하기 본문

프로그래밍/Unity

Unity 오브젝트 풀로 탄환 관리 최적화하기

cosmos_studio_ 2019. 12. 12. 20:51
반응형

유니티에서 Instantiate , Destory는 가비지 컬랙터를 소환한다.

가비지 컬랙터란 자동 메모리 청소라고 생각하면 된다. 쓰이지 않거나 버려져서 메모리를 차지하고 있는 영역을 비워주어 공간을 확보한다. 하지만 가비지 컬랙터가 실행되는 순간에  cpu의 점유율이 높아지고 게임 환경에 지장을 준다.

따라서 효율적으로 사용하기 위해 가비지 컬렉션을 회피하여야 하는데 좋은 수단 중 하나가 오브젝트 풀을 이용하여 자원들을 관리하는 것 특히 같은 오브젝트를 여러번 사용하는 탄환 발사 등이 좋은 예시이다.

 

요구사항

1.오브젝트들이 필요한 씬에 공급 가능해야함 -> 싱글톤 패턴 이용

2.풀에서 꺼내는 기능(pop)

3.풀에 다시 반환하는 기능(push)

4.풀에 적재된 오브젝트가 없을 때는 새로 생성하여 꺼낸다.

 

기본적인 구조

1. 오브젝트 풀

Projectile -> 총알을 담는 list

impact -> Hit에 생성되는 이펙트list

Muzzle -> 총알을 발사할때 생성되는 이펙트 list

 

2. 총알 발사 모듈

발사 시작시 Muzzle 이펙트 출력

출력 완료시 오브젝트 풀로 push

발사체 발사

 

3. 충돌 판정

충돌시 impact 이펙트 출력 (pop)

Impact 출력완료시 오프젝트 풀로 반납(push)

발사체 일정 시간 후 오브젝트 풀로 반납(push)

 

 

 

https://github.com/wjs991/Objectpool
 

wjs991/Objectpool

Contribute to wjs991/Objectpool development by creating an account on GitHub.

github.com

 

 

반응형
Comments