일전에 게임의 맵으로 쓸 3개의 층을 만들어놓았었다.
이제 이 3개의 레벨을 연결해볼 것이다.
게임 상에 레벨 3개를 모두 로드해놓으면, 성능 하락이 발생할 수 있다.
따라서 칸나가 현재 위치한 층만 로드되어있도록 할 것이다.
언리얼 엔진 5에서는 이것을 Level Streaming이라는 이름으로 이미 제공하고 있다.
들어가기에 앞서, Level Streaming을 쓸 때는 동적으로 스트리밍할 레벨 외에 고정으로 박혀있는 Persistent Level이 있어야 한다.
여기서는 하늘, 포스트 프로세싱 외 아무 것도 없게 비워둔 ValkyrieBuilding_Main을 Persistent Level로써 사용할 것이다.
그 다음 Persistent Level에 각 층을 연결하는 계단을 만들어주었다.
동시에 각 층도 계단으로 연결될 수 있도록 손봤다.
여러 레벨을 로드해놓고 작업할 때 현재 액터를 어느 레벨에 배치할지 결정하기 위해서는, 뷰포트의 우측 하단에서 Current Context를 원하는 것으로 설정 해주면 된다.
윈도우의 연필 모양을 눌러 각 레벨의 위치, 회전을 설정해줄 수 있다.
여기서는 구조상 연결을 위해 Floor2를 180도 회전해주었다.
또한 메뉴 중 Streaming Volumes라는 것이 있는데, Place Actors Panel을 열고 Streaming Volume을 배치한 뒤, 저기에 연결하여 해당 볼륨에 플레이어가 들어가면 레벨이 로드되도록 할 수 있다.
하지만 여기서는 다른 방법을 사용할 것이다. (바로 밑에 후술)
이제 이 3개의 층을 로드, 언로드 하도록 할 것이다.
이를 위해서 새로운 블루프린트 BP_MapLoader를 만들었다.
이전 포스팅의 BP_ConversationTrigger와 마찬가지로 BoxCollision 하나만 가지고 있다.
좌측 하단 변수들을 보면, LoadLevel과 UnloadLevel을 FName으로 가지고 있으며, 우측 눈 표시를 토글시켜 인스턴스마다 편집 가능하게 하였다.
주요한 노드는 Load Stream Level / Unload Stream Level이다.
주의해야할 점이, 두 노드는 비동기적으로 수행되기 때문에, Load를 걸어도 바로 맵이 로드되어있는 것은 아니다.
만약 동기적으로 맵을 호출하고 싶다면, Should Block on Load를 체크해주면 된다. 다만 이렇게 할 시 맵을 로드하는 동안은 메인스레드가 차단되어 게임이 멈출 것이다.
이렇게 만든 BP_MapLoader를 레벨 내 적절한 곳에 위치시켜주고, Load/Unload Level에 올바른 이름을 넣어주었다.
직접 플레이해보면서, 우측 하단 Levels 창을 통해 레벨이 동적으로 로드 / 언로드 되는 것을 글자 색을 통해 확인할 수 있다.
'언리얼 엔진 5 > 개발 일지' 카테고리의 다른 글
[UE5] 블루아카이브 TPS게임 개발일지 (64) - 프로젝트 마무리 (8) | 2024.03.08 |
---|---|
[UE5] 블루아카이브 TPS게임 개발일지 (62) - 대사 기능 적용 (0) | 2024.02.24 |
[UE5] 블루아카이브 TPS게임 개발일지 (61) - 대사 시스템 (Typewriter 효과) (0) | 2024.02.21 |
[UE5] 블루아카이브 TPS게임 개발일지 (60) - GameManager로 적 관리 (0) | 2024.02.17 |
[UE5] 블루아카이브 TPS게임 개발일지 (59) - 사망 연출 제작 3 (0) | 2024.02.16 |