본문 바로가기
UE5 개발

UE5 에서 Singleton 서브시스템 사용하기 (UE SubSystem)

by Daily Ideas 2023. 4. 10.
반응형

1. 정의

UE Subsystem이란?

https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/Subsystems/

 

프로그래밍 서브시스템

언리얼 엔진 4 의 프로그래밍 서브시스템 개요입니다.

docs.unrealengine.com

언리얼 엔진 4 (UE4)의 서브시스템은 수명이 관리되는 자동 인스턴싱 클래스입니다. 이 클래스는 사용하기 쉬운 확장점을 제공하여, 프로그래머는 블루프린트 및 Python 을 바로 노출시킴과 동시에 복잡한 엔진 클래스 수정 또는 오버라이드를 피할 수 있습니다.


서브시스템을 사용하는 이유

프로그래밍 서브시스템을 사용하는 데에는 다음과 같은 몇 가지 이유가 있습니다.

  • 프로그래밍 시간이 절약됩니다.
  • 엔진 클래스 오버라이드를 피할 수 있습니다.
  • 이미 바쁜 클래스에 API 추가를 피할 수 있습니다.
  • 사용자에게 친숙한 유형의 노드를 통해 블루프린트로 액세스할 수 있습니다.
  • 에디터 스크립팅이나 테스트 코드 작성을 위해 Python 스크립트에 액세스할 수 있습니다.
  • 코드베이스의 모듈성과 일관성을 제공합니다.

서브시스템은 플러그인을 만들 때 특히 유용합니다. 플러그인 작동에 필요한 코드 관련 지침이 없어도 됩니다. 사용자는 플러그인을 게임에 추가하기만 하면, 플러그인이 언제 인스턴싱 및 초기화될 지 정확히 알 수 있습니다. 따라서 UE4 에 제공되는 API 및 기능을 사용하는 데만 중점을 둘 수 있습니다.

API 기능을 손쉽게 제공하는 Subsystem

예제로, 엔진 내에서, 엔진의 서브시스템을  콜렉션을 관리하고 있음을 확인할 수 있다.
이것들은 오브젝트가 우선 생성되면,

블루프린트 등 필요한 곳에서 부를 경우 콜렉션 내에서 이미 존재하는 인스턴스를 반환하므로,
의도적으로 추가 인스턴스를 만들지 않는 이상  1개의 인스턴스만 존재하게 된다.


2.응용 - Subsystem 을 싱글톤 패턴으로 사용하기.

 

Using Singleton Design Pattern in Unreal -- Blog

Get the benefits of the Singleton design pattern without all the complications in Unreal.

www.gamedeveloper.com

언리얼에서 싱글톤 클래스를 만드는 방법론에 대하여 이런 문서를 찾았음.

간단하게 요약하면 다음과 같은데,

SubsystemParent ClassLifetime

Engine UEngineSubsystem Both in editor and in-game
Editor UEditorSubsystem When the Editor starts.
GameInstance UGameInstanceSubsystem As soon as your game starts, stays alive until the game is closed.
LocalPlayer ULocalPlayerSubsystem Matches the lifetime of its parent ULocalPlayer, can move between levels.
World UWorldSubsystem Matches its parent UWorld, is effectively per-level.
Engine UEngineSubsystem 에디터와 인게임 모두
Editor UEditorSubsystem 에디터가 시작될 때.
GameInstance UGameInstanceSubsystem 게임이 시작되자마자 게임이 종료될 때까지 살아남습니다.
LocalPlayer ULocalPlayerSubsystem 부모의 수명과 일치하며 ULocalPlayer수준 간에 이동할 수 있습니다.
World UWorldSubsystem 월드 수명과 일치하고 UWorld, 레벨별로 있습니다.

C++ 정적 클래스 싱글톤의 장점과 단점:

  • 인터페이스 프로그래머는
  • 에디터와의 잘못된 상호작용:
  • 작업이 없으면 에디터를 통해 게임을 여러 번 실행하는 사이에 인스턴스가 보존됩니다.
  • 나쁜 클래스 클래스 기본 객체 상호 작용:
  • 작업이 없으면 CDO가 생성될 때 인스턴스가 생성됩니다.
  • 불확실한 수명:
  • 싱글톤의 수명을 관리하려면 신중한 프로그래밍과 명확한 의도가 필요합니다.

언리얼 SubSystem 의 바닐라 C++ 싱글톤에 비해 이점:

  • 수명은 자동으로 관리됩니다.
  • 올바른 하위 시스템을 서브클래싱하면 인스턴스가 자동으로 생성되고 소멸됩니다.
  • 원하는 수명이 명시됩니다.UWorldSubsystem
  • 상속되는 하위 시스템은 World만큼만 존재한다는 것이 분명합니다 .
  • 클리너 청사진 액세스.
  • Python 스크립트에서 액세스할 수 있습니다.
  • 몇 가지 Unreal 클래스의 수명 주기에 대한 이해가 필요합니다.
  • 대신 Unreal의 액세스 스타일을 배워야 합니다.MyClass::GetInstance()

언리얼 SubSystem 의 바닐라 C++ 싱글톤에 비해 단점:

  • SubSystem은 UE 에디터에서 Subsystem 블루프린트 클래스를 직접 만들어서 데이터를 채우는 것은 불가능하다. 디자이너들이 직접 제어할 수 없다는 것은 단점.
  • 따라서 Wrapper 데이터 등을 가지고 싶다면 데이터 테이블 등에서 가져오거나, CustomSettings를 사용하는 등 대안이 필요하다.

 

 


예제: 

코드 부분 :

필요한 Subsystem을 상속받고 메타 디스플레이네임을 설정해 주면, 기본적인 사용 준비완료.
API 기능을 손쉽게 제공하는 Subsystem을 블루프린트에서 사용할 수 있다.

반응형

'UE5 개발' 카테고리의 다른 글

Unreal의 Property Specifiers  (0) 2023.04.10
UE5 UTexture2D에서 PNG 파일 추출하기  (1) 2023.03.21
SDAPI_사용 영상  (0) 2023.03.21
UE5에 StableDiffusion 연결  (0) 2023.03.21

댓글