https://dev.epicgames.com/documentation/ko-kr/unreal-engine/programming-subsystems-in-unreal-engine

 

프로그래밍 서브시스템 | 언리얼 엔진 5.4 문서 | Epic Developer Community

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

dev.epicgames.com

  • 수명이 관리되는 Auto Instancing Class
  • 사용하기 쉬운 확장점을 제공
    • Programmer는 BP 및 Python을 바로 노출시켜 복잡한 Engine Class 수정 혹은 Override를 피할 수 있다.

지원되는 Subsystem

  • Subsystem이 생성될 시 Initialize()가 호출 됨
  • Subsystem이 종료될 시 Deinitialize()가 호출 됨
    • 이 때 Subsystem에 대한 참조가 삭제되고, 더 이상 참조가 없으면 Garbate Collect 된다.

Engine

  • UEngineSubSystem을 상속 받아서 생성
  • Module의 Startup() 함수 반환 이후 Initialize() 된다.
  • Module의 Shutdown() 함수 반환 이후 Deinitialize() 된다.

Editor

  • UEditorSubsystem을 상속 받아서 생성
  • Module의 Startup() 함수 반환 이후 Initialize() 된다.
  • Module의 Shutdown() 함수 반환 이후 Deinitialize() 된다.

GameInstance

  • UGameInstanceSubsystem을 상속받아서 생성
  • 게임 도중에 생성 됨

LocalPlayer

  • ULocalPlayerSubsystem을 상속받아서 생성
  • ULocalPlayer의 Lifetime과 동일
  • 대상 Player가 Level을 이동할 시 해당 LocalPlayer Subsystem도 같이 이동한다.

World

  • UWorldsubsystem을 상속받아서 생성
  • 각 레벨별로 존재 함

Subsystem을 사용하는 이유

  • 프로그래밍 시간이 절약된다
  • Engine Class Override를 피할 수 있다.
  • 이미 바쁜 Class에 API 추가를 피할 수 있다.
  • 사용자에게 친숙한 유형의 Note를 통해 BP로 Access할 수 있다.
  • Editor Scripting이나 Test code 작성을 위해 Python Script에 Access 할 수 있다.
  • Code Base의 모듈성과 일관성을 제공합니다.

Plugin

  • Subsystem은 특히 Plugin을 만들 때 유용하다.
  • Plugin은 작동에 필요한 코드 관련 지침이 없어도 된다.
  • 사용자는 Plugin을 게임에 추가하기만 하면, Plugin이 언제 Instancing 및 Initialize가 될 지 정확히 알 수 있다.
    • Subsystem이기 때문에
  • 결과적으로 UE4에 제공되는 API 및 기능을 사용하는 데에만 중점을 둘 수 있다.

Blueprint로 Subsystem Access

  • Sybsystem은 BP에 자동 노출이 된다.
    • 또한 Context를 이해하는 Smart Node를 추가되므로 형변환이 필요가 없다.
    • 표준 UFUNCTION() 마크업 및 규칙으로 BP에 를 사용할 수 있는 API를 제어할 수 있다.

Module? Subsystem? (Not Reference)

  • 일반적으로 Module 안에 Subsystem이 포함된 구조인데, 유추 가능한 이유가 있긴 하다.
    • 보통은 Subsystem은 어지간해서는 Dedicated Server, Client 양쪽 다 존재한다.
    • Subsystem이 Logic만 담당하면 문제가 없지만, Data를 처리하게 되면 보안 이슈가 발생한다.
    • 때문에 Subsystem을 전용 Module로 감싸고, Module을 Server에서만 추가하는 방안을 고려해볼 수 있다.
      • 이 경우 Server에는 Module이 있으니 Subsystem을 접근할 수 있다.
      • 반대로 Client에서는 Module이 없으니 Module Validation에서 걸려 Subsystem에 접근이 불가하다.
  • 특정 기능에 관해서만 동작을 하는 Manager 같은 것이 있다면 Module/Subsystem을 이용하는 것이 좋을 것 같다.

'UE5 > Architecture' 카테고리의 다른 글

[Architecture] Config File  (0) 2024.05.06
[Architecture] Task System  (0) 2024.05.06
[Architecture] String  (0) 2024.05.06
[Architecture] Asset Registry  (1) 2024.05.06
[Architecture] Asset Reference  (0) 2024.05.06

+ Recent posts