1. GameInstanceSubsystem이란?
GameInstanceSubsystem은 Unreal Engine에서 UGameInstance에 종속되는 서브시스템입니다. 이는 게임 전반에서 지속적으로 유지되며, 게임이 실행되는 동안 전역적인 데이터를 관리하는 데 유용하게 사용됩니다.
언리얼 엔진에는 여러 서브시스템이 존재하는데, 대표적으로 WorldSubsystem, EngineSubsystem 등이 있으며, GameInstanceSubsystem은 이 중 UGameInstance에 속하는 서브시스템입니다.
2. GameInstanceSubsystem의 특징
- 게임 실행 중 지속됨: GameInstance가 살아 있는 동안 계속 유지되므로, 레벨 전환 시에도 데이터를 유지할 수 있습니다.
- 싱글턴 패턴과 유사: 모든 서브시스템은 엔진에 의해 자동으로 관리되며, GameInstanceSubsystem은 하나의 인스턴스만 생성됩니다.
- 게임 전역 관리에 유용: 예를 들어, 아이템 풀링 시스템, 플레이어 데이터 관리, 글로벌 설정 관리 등에 사용할 수 있습니다.
- Garbage Collection 대상이 아님: UGameInstanceSubsystem은 엔진에서 자동으로 생성 및 관리되므로 별도의 수명이 필요하지 않습니다.
3. GameInstanceSubsystem 구현 방법
3.1 클래스 생성
UGameInstanceSubsystem을 상속받아 서브시스템 클래스를 생성합니다.
#pragma once
#include "CoreMinimal.h"
#include "Subsystems/GameInstanceSubsystem.h"
#include "ItemPoolManager.generated.h"
UCLASS()
class MYGAME_API UItemPoolManager : public UGameInstanceSubsystem
{
GENERATED_BODY()
public:
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
virtual void Deinitialize() override;
void SpawnItem();
};
3.2 함수 정의
#include "ItemPoolManager.h"
#include "Engine/World.h"
void UItemPoolManager::Initialize(FSubsystemCollectionBase& Collection)
{
Super::Initialize(Collection);
UE_LOG(LogTemp, Log, TEXT("ItemPoolManager Initialized"));
}
void UItemPoolManager::Deinitialize()
{
UE_LOG(LogTemp, Log, TEXT("ItemPoolManager Deinitialized"));
Super::Deinitialize();
}
void UItemPoolManager::SpawnItem()
{
UE_LOG(LogTemp, Log, TEXT("Spawning an item from the pool"));
// 아이템 스폰 로직 구현
}
4. GameInstanceSubsystem 사용법
GameInstanceSubsystem을 사용하려면 GetSubsystem<UYourSubsystem>()을 호출하면 됩니다.
UItemPoolManager* ItemPoolManager = GetGameInstance()->GetSubsystem<UItemPoolManager>();
if (ItemPoolManager)
{
ItemPoolManager->SpawnItem();
}
5. GameInstanceSubsystem 활용 사례
5.1 아이템 풀링 시스템
아이템을 매번 생성하고 삭제하는 대신, GameInstanceSubsystem을 활용하여 일정 개수의 아이템을 미리 생성하고 필요할 때 재사용하는 방식으로 성능을 최적화할 수 있습니다.
5.2 글로벌 설정 관리
플레이어 설정, 게임 룰 등을 GameInstanceSubsystem에서 관리하면 레벨 변경이 되어도 유지할 수 있습니다.
5.3 온라인 멀티플레이어 관리
서버와의 연결 상태, 매치메이킹 정보 등을 GameInstanceSubsystem에서 관리하면 게임 전반에서 효율적으로 데이터를 공유할 수 있습니다.
6. 정리
- GameInstanceSubsystem은 UGameInstance에 속하는 서브시스템으로, 게임이 실행되는 동안 전역적인 데이터를 유지할 수 있습니다.
- 아이템 풀링, 글로벌 설정 관리, 멀티플레이어 정보 저장 등 다양한 활용이 가능합니다.
- GetSubsystem<UYourSubsystem>()을 사용하여 쉽게 접근할 수 있습니다.
이처럼 GameInstanceSubsystem은 게임 개발에서 매우 유용한 구조이며, 특히 지속성이 필요한 기능을 관리하는 데 최적화된 솔루션입니다. Unreal Engine을 활용한 프로젝트에서 적극적으로 활용하면 더욱 효율적인 시스템을 구축할 수 있습니다!
'TIL > C++와 UE' 카테고리의 다른 글
온도 시스템 (0) | 2025.06.04 |
---|---|
언리얼엔진 멀티플레이에서의 PlayerState (0) | 2025.04.08 |
Object Pooling (0) | 2025.03.28 |
언리얼 엔진 레플리케이션(Replication) (0) | 2025.03.11 |
네트워킹 및 멀티 플레이어 개요 (0) | 2025.03.10 |