강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

Solution C님의 프로필 이미지
Solution C

작성한 질문수

[Rookiss University] UE5 Lyra 클론 코딩 (Haker)

Common UI Frame #2

UGameUIManagerSubsystem::ShouldCreateSubsystem 이상한 것 같은데요

해결된 질문

작성

·

37

0


bool UGameUIManagerSubsystem::ShouldCreateSubsystem(UObject* Outer) const
{
	// 우선 DedicatedServer의 경우, GameUIManagerSubsystem을 활성화하지 않음
	if (!CastChecked<UGameInstance>(Outer)->IsDedicatedServerInstance())
	{
		// 만약 어떠한 Subsystem도 UGameUIManagerSubsystem을 상속받지 았다면, 해당 GameInstanceSubsystem은 활성화 안함
		TArray<UClass*> ChildClasses;
		GetDerivedClasses(GetClass(), ChildClasses, false);

		return ChildClasses.Num() == 0;
	}

	return false;
}
ChildClasses.Num() != 0;

if 안의 리턴문 이걸로 바꿔야 게임UI매니저 서브시스템을 상속받았을 때 create subsystem하게 하는 거 아닌가요?

이러면 서브클래스 안 만들었을때 빼고 안 만들어주는 거 아닌지요

답변 2

0

Liu님의 프로필 이미지
Liu
지식공유자

해당 클래스는 UI 관리에 대한 추상화 클래스라서 자식이 없을 때만 생성되는게 맞습니다.

대신 해당 클래스를 상속 받아 원하는 방식의 UI 시스템을 만들도록 설계되었습니다.

Solution C님의 프로필 이미지
Solution C
질문자

아 현재 인스턴스로 존재하지 않으면 생성한다는 건가요? 아닌가?

HakUIManager가 이 클래스를 상속받았으니까 GetDerivedClasses한 결과가 1일거라서 생성이 안 되는 게 맞는거 아닌가 생각했는데.

Liu님의 프로필 이미지
Liu
지식공유자

네 그래서 UGameUIManagerSubsystem은 생성되지 않고 HakUIManager만 생성됩니다.

0

안녕하세요, 인프런 AI 인턴입니다.

Solution C님, 질문 주신 부분에 대해 설명 드리겠습니다. 함수 UGameUIManagerSubsystem::ShouldCreateSubsystem은 특정 조건에 따라 서브시스템을 생성할지 여부를 결정합니다. 코드의 목적과 로직은 서버의 유형과 상속 여부에 따라 서브시스템의 생성을 결정하는 데 있습니다.

현재 코드에서는 ChildClasses.Num() == 0일 경우에만 서브시스템을 생성하지 않도록 되어 있습니다. 즉, UGameUIManagerSubsystem을 상속받은 클래스가 없다면 서브시스템을 생성하지 않는다는 의미입니다.

따라서, 질문하신 것처럼 ChildClasses.Num() != 0으로 변경하면, UGameUIManagerSubsystem을 상속받은 클래스가 있을 경우에만 서브시스템을 생성하게 됩니다. 이 변경은 원하는 기능에 따라 맞는 수정일 수 있습니다. 결과적으로, 서브클래스가 존재할 때만 서브시스템을 생성하려는 의도라면 ChildClasses.Num() != 0으로 수정하는 것이 맞습니다.

아래는 관련 리소스입니다:
- 언리얼 엔진의 서브시스템 설명
- UE5의 서브클래스 처리 방법에 대한 예시

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Solution C님의 프로필 이미지
Solution C

작성한 질문수

질문하기