Common User
맵을 로딩하기 위한 플러그인
CommonSession_HostSessionRequest
CommonSessionSubSystem에 전달하는 객체
MapID(맵경로)와 CmdArgs(Experience 이름)을 갖는다.
CreateHostingRequest함수로 생성하고 바로 계속 사용하려면 바로 저장해야 dangling나지 않는다.
CommonSessionSubsystem::HostSession
GetWorld()->ServerTravel에서 MapID와 ExtraArgs를 이용해서 MapLoad를 시작한다.
GameModeBase에서 ExtraArgs를 받아 Parse해서 Experience의 이름을 저장한다.
Game Feature
런타임중에 Action에 해당하는 기능들을 끄고 켤 수 있다.
ExperienceManagerComponent::OnExperienceLoadComplete에서 Game Feature Plugin의 URL을 저장한다.
그리고 로딩도 해주고 활성화도 해준다. 활성화 성공하면 OnGameFeaturePluginLoadComplete함수가 불린다.
모든 GameFeature Plugin이 로딩, 활성화되면 OnExperienceFullLoadComplete를 실행하고 여기서
GameFeature Action들을 활성화시킨다.
GameFeature Action을 활성화시킬 때 어떤 PIE에서 활성화시킬 지 모르기 때문에 WorldContext를 넘겨준다.
(GameFeature은 Engine에 종속적이므로 어떤 World인지 모름)
GameFeatureAction_AddInput
어떤 MappingContext를 사용할 지 선택 가능
AddInputConfig로 MappingContext추가, RemoveInputConfig로 MappingContext제거한다.
GameFeature Action은 엔진에 종속적이므로 PIE를 껐다 켜도 계속 InputConfig설정을 다시하기 때문에
Reset으로 RemoveInputConfig해줘야 한다. FPerContextData는 Reset을 위한 정보를 담는 구조체다.
GameFeatureAction이 추가 될 때 AddToWorld에 AddExtensionHandler한다.
델리게이트가 아니라 이벤트인데 차이는 델리게이트는 브로드캐스트하면 모든 구독한 함수를
실행하는 반면 이벤트는 조건에 맞는 함수만 실행한다. 그래서 EventName이 Extension_Added인 경우에
AddInputConfig를 실행한다.
AddExtensionHandler할 때 Pawn이 생성되지 않았을 수 있으므로 HeroComponent::InitializePlayerInput에서
(이 시점에서는 Pawn이 있는 것이 확정됨) SendGameFrameworkComponentExtensionEvent로 NAME_BindInputsNow
이벤트를 보내 AddInputConfig를 실행한다.
'Unreal' 카테고리의 다른 글
| [Unreal] Lyra 프로젝트 분석 - 08. Weapon System (0) | 2025.02.09 |
|---|---|
| [Unreal] Lyra 프로젝트 분석 - 07. Cosmetic (0) | 2025.02.08 |
| [Unreal] Lyra 프로젝트 분석 - 05. Input (0) | 2025.02.07 |
| [Unreal] Lyra 프로젝트 분석 - 04. Camera (0) | 2025.02.07 |
| [Unreal] Lyra 프로젝트 분석 - 03. Modular Gameplay Actor (0) | 2025.02.06 |