서브 레벨 스트리밍
언리얼에서 Level 은 유니티의 Scene 과 유사한 개념이다.
유니티에서도 Scene 을 Additional 모드로 로드가 가능하듯이
언리얼에서도 Level 을 Streaming 상태로 로드가 가능하다.
즉, 아트작업자가 A라는 Level을 만들고, 해당 Level 에서 조명, 맵, 등등을 세팅하고
세팅된 A 를 사용하게 될 B 라는 실제 빌드용 Level 에서
Streaming Level 로 A를 등록해두면
A 가 현재 B Level 에 겹쳐서 로드된다.
아트 작업자는 A 레벨에서 작업을 하고
코드 작업자는 B 레벨에서 코드를 작성하면
작업 간에 충돌이 없을 뿐 더러, 에디터에서도 상시로 A + B 형태로 존재도 가능하다.
사실 근본적인 기술의 용도는
https://docs.unrealengine.com/4.26/ko/BuildingWorlds/LevelStreaming/Overview/
여기에서 자세히 볼 수 있다.
플레이어 거리에 따라 광활한 맵의 정밀도나 시야범위를 조절하기 위해 로드/언로드를 하기 위함이 주 목적이다.
그럼 어떻게 하느냐?
예시로 아무 씬을 잡아보겠다.
상단 Window 메뉴에서 Levels 를 찾는다.
열면 대충 이렇게 나오는데, Persistent Level 이 현재 열려있는 메인 레벨을 의미한다.
여기서 아래 버튼을 누르면,
Content Browser 에서 존재하는 레벨을 가져올 수 있다.
예시로 다른 레벨을 가져온다.
그럼 바로 현재 레벨에 내가 불러온 레벨이 같이 로드되지만, 메인 레벨은 유지된다.
이 상태에서는 플레이해보면 불러왔던 인터뷰 레벨은 다시 날아간다.
여기까지 한 과정이 저 레벨 윈도우에서 현재 레벨에서 Streaming 해서 사용할 레벨은 ~~ 이야. 라고 등록해준 것이다.
여기까지만 해도 실제 작업 시 원하는 레벨 끼리 겹쳐 볼 수 있으므로 매우 좋다.
이제 코드에서 로드는 어떻게 하나?
OpenSubLevel 이라는 함수를 정의했다. 엔진의 UGameplayStatics::LoadStreamLevel 을 단순하게 Wrap 한 구조다.
Wrap 이 필요없다면 그냥 직접 호출하면 된다.
void MyGameInstance::OpenSubLevel(const FString& LevelName, bool bAfterVisible, bool bIsSync, FLatentActionInfo Action)
{
UGameplayStatics::LoadStreamLevel(GetWorld(), *LevelName, bAfterVisible, bIsSync, Action);
}
등록된 레벨만 로드가 가능하니, 로드가 안된다면 에디터에서 확인이 필요하다.
'언리얼5 & C++' 카테고리의 다른 글
런타임 생성 물체를 Navigation System 에서 인식하는법 (0) | 2024.11.18 |
---|---|
[언리얼5] Data Table 로더 만들기 *4부* / 커스텀 에디터 버튼 생성하고 기능연결 (0) | 2024.06.13 |
언리얼5 C++ | 레벨 열기와 특정 게임모드로 레벨 열기 (0) | 2024.02.16 |
[언리얼5] Data Table 로더 만들기 *3부* (CSV) with Python / 에셋 생성하기 (1) | 2024.01.24 |
[언리얼5] Data Table 로더 만들기 *2부* (CSV) with Python / C++ 구조체 생성기 작성하기 (2) | 2024.01.24 |