이 문서는 Host / Session / Common Loading Plugin 의 자세한 기능 등을 제외하고 오직 로딩 화면이 바뀌는 로직만 설명합니다.
우선 로딩화면 위젯은 다음과 같이 구성 되어있습니다.

W_LoadingScreen_HOST 라는 Base 위젯이 있고
배경을 담당하는 W_LoadingScreen_Default 위젯
텍스트(디버그 내용)를 담당하는 W_LoadingScreenReasonDebugText 위젯으로 구성되어 있습니다.
후에 교체될 로딩화면은 W_LoadingScreen_Default 위젯 , 즉 배경이 바뀌게되며 배경 위젯으로는
W_LoadingScreen_ControlPoint / W_LoadingScreen_TDM이 있습니다.
기존 로딩 화면 | 게임(QuickPlay) 참가 로딩 화면 |
![]() |
![]() |
Lyra 게임을 시작하게 되면 레벨 전환이 되는 예시는 몇 가지 있지만 이 문서에서는 FRONT END 기준으로만 설명합니다.
L_DefaultEditorOverview | W_ExperienceSelectionScreen |
![]() |
![]() |
텔레포트와 Overlap 되거나 게임 참가(QUICK PLAY) 버튼을 클릭 시, 레벨 전환이 이루어 집니다.
그리고 레벨 전환이 필요한 액터에는 LyraUserFacingExperienceDefinition 이라는 DataAsset을 상속받은 커스텀 Primary Asset을 가지고 있습니다.

이 데이터 에셋에는 전환된 레벨에 대한 정보를 담는 데이터가 있지만 로딩화면에 필요한것은
MapID (FPrimaryAssetId - 레벨은 기본적으로 Primary Asset입니다) 와
LoadingScreenWidget (TSoftClassPtr<UUserWidget>) 입니다.
프로젝트 세팅 - 에셋 매니저를 보면 LyraUserFacingExperienceDefinition 이 Primary Asset으로 지정되어 있는것을 알 수 있습니다.

여기까지 정리를 해보면 레벨 전환이 이루어질 액터 (텔레포트 / QUICK START) 는 각각 Primary Data Asset 을 가지고 있고, 레벨 전환 트리거가 일어나게되면 Primary Data Asset에서 데이터를 가져와 해당 레벨로 이동, 배경 Widget을 바꾸어준다는 것을 알 수 있습니다.
그리고 UserFacingExperience 프라이머리 데이터 에셋은 액터 변수에 할당되어있지않고 실행 시, 블루프린트에서 생성됩니다.
프라이머리 에셋은 에셋매니저가 관리해 주므로 Primary Asset ID를 통해 쉽게 가져오는 것이 가능하다고 합니다.
해당 과정은 여러 곳에 존재하고 복잡하므로 PrimaryAssetID을 이용하여 LyraUserFacingExperience 데이터 에셋을 Async Load Primary Asset List로 가져와 LyraUserFacingExperience 배열에 집어넣는다 정도라고 생각하시면 될 것 같습니다.
그리고 QUICK PLAY를 클릭하였을 때 과정입니다.
앞의 로그인 과정과 뒤의 네트워크 연결을 제외한 부분입니다.
Lyra 게임 모드는 2가지가 있습니다. (DA_Convolution_ControlPoint / DA_Expanse_TDM)
2가지 게임 모드중 하나를 랜덤으로 선택하여 LyraUserExperience 를 반환해 줍니다.
랜덤으로 선택된 게임모드는 Prepare to Enter User Facing Experience 라는 블루프린트 매크로가 정의되어있고

LyraUserExpereince 에서 위젯을 비동기 로드하여 저장합니다.
LyraLoadingScreenSubSystem 은 GameInstanceSubSystem 입니다.
현재까지 과정은 QUICKPLAY 를 눌러 게임모드 하나를 랜덤으로 뽑은 LyraUserFacingExperience 프라이 머리 데이터 에셋에서 위젯을 가져와 LyraLoadingScreenSubsystem의 LoadingScrrenWidgetClass에 바꿀 위젯을 저장한 상태 입니다.
그리고 그 이후에 서버 관련 로직이 실행되면서 OpenLevel / ClientTravel 등 레벨 이동 함수가 실행될 것입니다.
레벨이동이 되었을 때 다음은 CommonLoadingScreen 플러그인에 있는 LoadingScreenManager.cpp 의 Tick() 함수가 반응을 하게 됩니다.
Tick 함수는 UpdateLoadingScreen() 함수를 통해 로딩화면을 보여주어야 하는지 체크합니다.
ShouldShowLoadingScreen → ShowLoadingScreen → Settings 에서 위젯 가져옴 → CreateWidgetInstance
CommonLoadingScreenSettings Settings 은 플러그인 설정 입니다.

Common Loading Screen 의 Loading Screen Widget 에 설정되어있는 Host 위젯을 가져와 CreateWidgetInstance를 통해 생성 합니다.
아직 배경 위젯이 바뀐 상태가 아닙니다.
따라서 원래 위젯 W_LoadingScreen_Host인 상태로 로딩화면이 (재)생성되고
재생성됨에 따라 Construct 이벤트가 발생하게 됩니다.
Host 위젯의 로직에 따라 아까 LyraLoadingScreen SubSystem에 저장하였던 위젯을 가져와 저장한 다음 배경인 W_LoadingScreen_Default 인 해당 위젯을 SetContent를 이용하여 바꾸어 줍니다.
그리고 AddChild함수에는 네임드 슬롯의 Child (W_LoadingScreen_Default) 를 지우고 새로운 패널 (위젯)을 붙이는 함수입니다.
이와 같이 Construct 이벤트 ~ Set Content 로직이 종료된 후
Common Loading Screen 플러그인은Tick 함수를 이용하여 로딩화면을 구성하였는데

로딩이 다 끝난 후 얼마동안 더 로딩 위젯을 보여줄 것인지 / CheckForAnyNeedToShowLoadingScreen 의 다양한 상황에서 검사 등 목적인 것 같습니다.
Common Loading Screen 플러그인을 커스텀을 한다면 로딩화면을 바로 표시하는 방법을 찾으면 Tick Interval을 조금 늦추는 방법도 있지 않을까 생각합니다.