[Unreal]#26_Subsystem, 하위 시스템

2024. 3. 19. 16:14· 게임개발/Unreal C++
목차
  1. #0. 개념
  2. 1. Subsystem
  3. 2. 장점
  4. 3. LifeTime(생명 주기)
  5. #2. 예제(UGameInstanceSubsystem)
  6. 1. UMyGameInsatnceSubsystem.h
  7. 2. UMyGameInstanceSubsystem.cpp
  8. 3. GameInstance를 통해 GameInstanceSubsystem 가져오기

 

#0. 개념

 

1. Subsystem

 

USubsystem

Subsystems are auto instanced classes that share the lifetime of certain engine constructs

docs.unrealengine.com

"Subsystems are automatically instanced classes with managed lifetimes", Unreal Engine의 Subsystem은 수명 주기가 관리되는 자동 인스턴스 클래스입니다. 사용자 정의 생명 주기에 따라서, Initialize()와 Deinitialize()가 호출됩니다. 주요 특징은 클래스의 인스턴스 생성을 위한 별도의 생성 코드 혹은 인프라를 빌드할 필요가 없습니다!

 

2. 장점

  1. 효율성
  2. 모듈성과 일관성
  3. API가 필요 없다.
  4. 블루프린트 접근성

 

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
  1. #0. 개념
  2. 1. Subsystem
  3. 2. 장점
  4. 3. LifeTime(생명 주기)
  5. #2. 예제(UGameInstanceSubsystem)
  6. 1. UMyGameInsatnceSubsystem.h
  7. 2. UMyGameInstanceSubsystem.cpp
  8. 3. GameInstance를 통해 GameInstanceSubsystem 가져오기
'게임개발/Unreal C++' 카테고리의 다른 글
  • [Unreal_Tip]#2_상위 클래스의 컴포넌트를 사용자 정의 하위 클래스로 변경하는 방법
  • [Unreal_Tip]#1_Log 깨짐 현상(한글)
  • [Unreal]#27_Enhanced Input
  • [Unreal]#26_Game Ability System(GAS)
Hardii2
Hardii2
Hardii2
개발 블로그
Hardii2
전체
오늘
어제
  • 분류 전체보기
    • 알고리즘
    • 웹 개발
      • Node.js
      • React
    • 게임개발
      • DirectX12
      • 관련 지식
      • Unreal C++
      • Unreal 블루프린트
    • 언어
      • Effective C++
      • Basic C++
      • 디자인 패턴
      • 자료구조
      • 기술 질문
    • 문제 풀이
      • BOJ 문제 풀이
      • Programmers 문제 풀이
      • geeksForgeeks 문제 풀이
    • 수학
      • 확률과 통계
      • 게임수학
    • 개인프로젝트
    • 그룹프로젝트
      • PM
      • Dev
    • Github

블로그 메뉴

  • 홈
  • 글쓰기

공지사항

인기 글

태그

  • set
  • Unreal Blueprint
  • 알고리즘
  • 개발
  • 정렬
  • 최단 경로
  • DP
  • stl
  • BFS
  • 트리
  • 디자인 패턴
  • unreal
  • C++
  • 기술 질문
  • programmers
  • dfs
  • Effective C++
  • BOJ
  • 우선순위 큐
  • 그래프

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hardii2
[Unreal]#26_Subsystem, 하위 시스템
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.