본문 바로가기
Unreal Engine/[Inflearn_rookiss] UE5 Lyra 분석

15. GameFeature 활성화

by 헛둘이 2024. 10. 31.

언리얼 엔진 5에서는 모듈형 게임플레이 방식이 도입되었는데, 그 중 하나가 GameFeature 방식입니다.

 

이 플러그인의 강력한 점은 런타임 중에 끄고 켤 수 있다는 것입니다.

또한 게임을 새로 컴파일하지 않고도 컨텐츠를 추가할 수 있으므로 많은 시간을 절약할 수 있습니다.

 

 

또한 게임 내부에서 GameFeature에 대해 참조하지 않으므로 의존성에 대해 자유로운 편입니다.

 

출처: 

https://www.youtube.com/watch?v=-DLeHXrGPrM&t=36s 

 


Lyra에서는 ShooterCore라는 GameFeature를 사용하고 있고, 해당 시스템은 InitState와 엮여 있습니다.

 

 

해당 기능을 사용하기 위해 Enum class에 LoadingGameFeatures 단계를 추가해주었습니다.

이 단계는 Loading이 완료되었을 때 UHmExperienceManagerComponent에서 Delegate를 통해 넘어가게 됩니다.

 

 

현재 상태가 Loading 상태인지 체크한 후에, 람다식을 정의합니다.

이 함수가 하는 일은 첫 번째 인자인 Experience를 가져온 후, 해당 Exprerience에 설정된 GameFeature들을 URL 배열에 등록하는 일을 하게 됩니다.

 

지금은 현재 Experience를 대상으로 URL을 가져오게 되고, GameFeaturesToEnable 배열에 ShooterCore를 미리 넣어 두면 올바르게 작동합니다. (해당 부분은 Blueprint를 통해 기입)

	NumGameFeaturePluginLoading = GameFeaturePluginURLs.Num();
	if (NumGameFeaturePluginLoading)
	{
		LoadState = EHmExperienceLoadState::LoadingGameFeatures;
		for (const FString& PluginURL : GameFeaturePluginURLs)
		{
			UGameFeaturesSubsystem::Get().LoadAndActivateGameFeaturePlugin(PluginURL, FGameFeaturePluginLoadComplete::CreateUObject(this, &ThisClass::OnGameFeaturePluginLoadComplete));
		}
	}
	else
	{
		OnExperienceFullLoadCompleted();
	}

 

그 후 다시 해당 배열을 순회하며 GameFeatureSubsystem에서 지원하는 LoadAndActivateGameFeaturePlugin 함수를 통해서 활성화해줍니다.

 

그 후 완료되면 Delegate로 다음 InitState로 넘김으로써 해당 단계를 넘어가게 됩니다.

 

정리하면, 로딩이 끝난 시점에서 LoadingGameFeatures 단계로 넘어온 후, 해당 단계에서 미리 등록해 둔 GameFeature들을 LoadAndActivate해준 후 LoadCompleted 단계로 넘겨주는 일련의 과정이라고 볼 수 있습니다.

 

댓글