Scene 전환
예전에는 Application.LodeLevel() 로 요즘에는 SceneManager.LodeScene() / SceneManager.LodeSceneAysnc() 등의 함수로 씬 전환을 했을것이다.
그런데 사양이 떨어지는 모바일 환경같은경우에 씬 전환할때 튕겼던 적을 경험한적이 있는가? CodingGom은 있다. 이유는 간단하다. 씬 전환할때 메모리가 급격히 증가하기 때문이다.
음… 아니 다음씬으로 전환되면, 이전씬의 오브젝트들은 파괴되어 메모리가 반환되지 않는가? 그럼 부족하지 않아야 하잖아? 맞는 말이다. 다음씬이 로드되면 이전씬의 오브젝트들은 파괴된다. 물론, Dontdestroyonload()등의 처리가 된 녀석들은 제외하고 말이다.
위의 말을 살펴보자. 다음씬이 로드된 후 파괴되어 메모리가 반환 된다. 아… 다음씬이 로드된상태는 이미 상당량의 메모리를 사용하고 있는데 이전 씬의 메모리도 남아있는것이다.
즉, A씬 -> B씬일때 A씬 메모리 + B씬 메모리의 구간이 생기는 것이다.
본인의 경우에는 중계씬을 만들어 해결했었다. 중계씬이라고 하면 잘 모르는 사람은 로딩씬이라고 생각하면 된다. 오브젝트가 거의 없어 메모리를 많이 차지않는 씬을 전환되는 씬들 사이에 두는 것이다.
A씬 -> 중계씬 -> B씬 의 경우는 중계씬에서 A씬의 메모리가 해제되고 B씬이 로드되면 중계씬의 적은 메모리가 해제되기 때문에 메모리 튕김현상이 줄어들 것이다.
하지만 어디까지나 중계씬과 다음씬의 메모리를 감당하는 환경이여야 한다.
물론 이외의 방법도 있을것이다. 어디까지나 이 방식은 주관적으로 좋은거 같다. 여담으로 많은 모바일게임들이 로딩씬을 만드는 이유는 위의 이유도 한몫 한다는 풍문이 있다.