Object Pooling & SceneManager

Unity/Bug Report

2020. 9. 5. 00:31

당혹스러운 경험을 했다

 

로딩 씬을 만들면서 당연히 오브젝트 풀링을 해줄거라는 믿음(?)

 

실상은 다음 목표 씬의 이미 생성되어 있는 오브젝트들이

 

초기화 될 때까지 로딩하는 녀석일 뿐이었다

 

내가 만드는 게임에서는 0.5~1초마다 

 

대략 40개의 오브젝트들이 풀링되어 나온다

 

그리고 10초 후에 사라지니 최악의 경우

 

200개의 오브젝트들이 씬에 동시에 존재하게 된다

 

그럼 200 이상만 만들어 놓으면 되는가 하면..

 

생성되는 오브젝트가 다 같은 놈들이 아니라서 

 

못해도 해당 종류만큼은 필요하다

 

이는 당연히 어느정도의 시간을 요구했고

 

플레이어는 검은 화면을 몇초간 쳐다볼 수 밖에 없었다

 

그래서 로딩 씬에서 오브젝트 풀링이 되면 좋겠다 생각했는데

 

Async 형태의 SceneManager 함수는 

 

위에서도 말한 것처럼 이미 생성된 오브젝트들에 대해서만

 

초기화를 해주기에 의미가 없었다

 

그렇다고 Coroutine을 돌리면 게임 전체 로직과 맞물려

 

돌아가기 때문에 속도가 미~~친듯이 느려졌다

 

마지막으로 async/await를 이용하려 했더니

 

Instantiate는 Main Thread에서 밖에 사용할 수 없다는 말에 넉다운..

 

해결책은 간단했다

 

1. 오브젝트 풀링은 로딩 씬에서 구현 못함

2. 풀링할 오브젝트 수를 줄이고 fade in/ fade out으로 속이자

 

오브젝트 풀링에 들어갈 프리팹 개수가 10개가 넘는데

 

1000개만 생성하기로 결정하였고

 

막상 돌려보니 어색하지 않게 고르게 분배되어 나오더라

 

그리고 페이드인/아웃 1초정도 해주니 적당히 눈속임도 가능..

 

 

'Unity > Bug Report' 카테고리의 다른 글

git & avast anti virus  (0) 2020.09.05
#1. Object Pooling에서 생긴 일  (0) 2020.08.17