이건 전 AXE팀의 NDC 발표 내용 중 일부인데 유니티에서 씬간의 이동시 중간에 빈 씬을 삽입하여 순간적 최대 사용 메모리 양을 줄이는 기법입니다. 이론적으로 말하자면 A씬에서 B씬으로 이동한다고 하였을 때 B씬이 로딩되었을 때 A씬이 언로드되기 전까지 최대 메모리 사용량은 A씬의 메모리 사용량 + B씬의 메모리 사용량이 됩니다. 이때 중간에 메모리 사용량이 거의 없는 빈 이동 씬을 삽입하여 A씬에서 빈 이동 씬으로 이동한 후에 빈 이동 씬에서 B씬으로 이동하게 만듭니다. 이런 빈 이동 씬을 이용하면 순간적 최대 사용 메모리양은 A씬 + 빈 이동 씬과 빈 이동 씬 + B씬 중 최대 메모리 사용량이 됩니다. NDC 내용을 보면 순간 최대 사용 메모리양으로 인하여 튕긴 현상이 있어서 이것을 구현하였다고 합니다.
해당 기법의 구현은 간단합니다. 제 구현은 아래와 같습니다.
우선 화면 처리에서 빈 이동 씬을 중간에 경유하는 것을 숨기기 위하여 씬간의 이동시 화면을 검게 만들었습니다. A씬에서 페이드 아웃하고 B씬 로딩시 페이드 인을 이용하였습니다. 이 부분은 페이드 아웃과 인의 처리가 각각의 프로그램마다 틀릴 수 있을 수 있습니다.
다음으로 빈씬을 이동하는 씬의 스크립트에서 아래와 같이 빈 씬,여기서의 빈씬 이름은 SceneMover,을 로딩합니다.
SceneManager.LoadScene("SceneMover");
빈 씬에는 게임 오브젝트 하나만을 만들고 아래와 같은 스크립트를 작성하였습니다.
public class SceneMover : MonoBehaviour
{
void Start()
{
LoadScene();
}
void LoadScene()
{
SceneManager.LoadScene(Global.LevelSceneName);
}
}
빈 씬이 로딩되고 기존 씬이 언로드되면 해당 게임오브젝트의 스크립트가 실행되어 다음 씬으로 이동할 것입니다.
여기서 생각해 볼 것인 다음 씬의 이름을 어떻게 넘기는 것인가 하는 것인데 싱글톤을 이용하는 방법이 있을 것입니다. 하지만 저는 Global.LevelSceneName이라는 정적 클래스의 변수를 이동하여 이동하게 만들었습니다.
이 기법은 유니티에서 최대 메모리 사용량 때문에 프로그램 튕김 현상이 있을 때 사용할만 합니다. 그 외에 단점은 씬 간의 이동시 빈 이동씬을 로딩하기 때문에 씬간의 이동시 이동 시간이 약간 증가할 수 있다는 것입니다.
'개발 라이브러리 & 툴 > 유니티' 카테고리의 다른 글
Unity 안드로이드 개발시 알아두면 좋은 것들 (0) | 2021.12.27 |
---|---|
Unity 안드로이드 빌드 시 화면 멈춤(Freezing) 현상 해결 (0) | 2021.12.26 |
Unity 여러 개의 카메라를 이용하여 여러 개의 포스트 이펙트 적용하기 (0) | 2021.12.03 |
Unity 개발시 편집 중인 텍스트나 csv파일 데이터를 게임에서 읽기 (0) | 2021.11.26 |
Unity 2D 카메라 화면 크기 및 좌표 범위 얻기 (0) | 2021.11.24 |
Unity 스크립트 수정 후 스크립트 관련 대화상자 뜨는 시간 줄이기 (0) | 2021.10.29 |
Unity 정적(Static)객체를 전역 변수처럼 활용하기 (0) | 2021.10.22 |
Unity 싱글톤(Singleton)의 이해 (0) | 2021.10.21 |