#0. 개념
1. Subsystem
"Subsystems are automatically instanced classes with managed lifetimes", Unreal Engine의 Subsystem은 수명 주기가 관리되는 자동 인스턴스 클래스입니다. 사용자 정의 생명 주기에 따라서, Initialize()와 Deinitialize()가 호출됩니다. 주요 특징은 클래스의 인스턴스 생성을 위한 별도의 생성 코드 혹은 인프라를 빌드할 필요가 없습니다!
2. 장점
- 효율성
- 모듈성과 일관성
- API가 필요 없다.
- 블루프린트 접근성
3. LifeTime(생명 주기)
1. UGameInstanceSubsystem
2. ULocalPlayerSubsystem
3. UWorldSubsystem
생명 주기를 설정하기 위해 우리는 크게 세 가지 서브시스템을 상속받습니다. 세 가지 하위시스템들은 모두 게임 중심의 하위 시스템입니다. 예를 들면, 게임 인스턴스 생성 시점에 UGameInstanceSubsystem을 상속 받은 사용자 정의 서브시스템이 함께 생성됩니다. 이때, 사용자 정의 서브시스템은 초기화 작업을 수행하고, 게임 인스턴스가 파괴되기 전에 초기화가 해제됩니다. 따라서, 우리는 별도의 사용자 정의 서브시스템의 초기화/초기화 해제 작업을 수행할 필요가 없습니다!
#2. 예제(UGameInstanceSubsystem)
1. UMyGameInsatnceSubsystem.h
// MyGameInstanceSubsystem.h 파일
#pragma once
#include "CoreMinimal.h"
#include "Subsystems/GameInstanceSubsystem.h"
#include "MyGameInstanceSubsystem.generated.h"
UCLASS()
class MYGAME_API UMyGameInstanceSubsystem : public UGameInstanceSubsystem
{
GENERATED_BODY()
public:
// UGameInsatnce의 초기화 시점에 호출되는 GameInstanceSubsystem의 초기화 함수
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
// UGameInstance의 비 초기화 시점에 호출되는 GameInsatnceSubsystem의 비 초기화 함수
virtual void Deinitialize() override;
// 사용자 정의 함수
void CustomFunction();
};
2. UMyGameInstanceSubsystem.cpp
// MyGameInstanceSubsystem.cpp 파일
#include "MyGameInstanceSubsystem.h"
#include "Engine/Engine.h"
void UMyGameInstanceSubsystem::Initialize(FSubsystemCollectionBase& Collection)
{
Super::Initialize(Collection);
// 초기화 로직을 여기에 작성합니다.
UE_LOG(LogTemp, Warning, TEXT("MyGameInstanceSubsystem has been initialized"));
}
void UMyGameInstanceSubsystem::Deinitialize()
{
// 종료 로직을 여기에 작성합니다.
UE_LOG(LogTemp, Warning, TEXT("MyGameInstanceSubsystem is deinitializing"));
Super::Deinitialize();
}
void UMyGameInstanceSubsystem::CustomFunction()
{
// 사용자 정의 기능 구현
UE_LOG(LogTemp, Warning, TEXT("CustomFunction called in MyGameInstanceSubsystem"));
}
3. GameInstance를 통해 GameInstanceSubsystem 가져오기
// 어떤 게임 로직이 있는 파일
#include "MyGameInstanceSubsystem.h"
void SomeGameLogicFunction(UObject* ContextObject)
{
UMyGameInstanceSubsystem* MySubsystem = UGameplayStatics::GetGameInstance(ContextObject)->GetSubsystem<UMyGameInstanceSubsystem>();
if (MySubsystem)
{
// 서브시스템의 사용자 정의 기능 호출
MySubsystem->CustomFunction();
}
}
1. GameInstance 생성 시점에 GameInstanceSubsystem 유형의 객체가 자동 생성됩니다.
2. GameInstance의 초기화 시점에, GameInstanceSubsystem 또한 초기화됩니다.
3. GameInstance를 통해 GameInstanceSubsystem을 가져올 수 있습니다.
'게임개발 > Unreal C++' 카테고리의 다른 글
[Unreal_Tip]#2_상위 클래스의 컴포넌트를 사용자 정의 하위 클래스로 변경하는 방법 (0) | 2024.04.10 |
---|---|
[Unreal_Tip]#1_Log 깨짐 현상(한글) (0) | 2024.04.10 |
[Unreal]#27_Enhanced Input (2) | 2024.03.01 |
[Unreal]#26_Game Ability System(GAS) (0) | 2024.02.23 |
[Unreal]#25_Collision Data (1) | 2023.12.02 |