https://dev.epicgames.com/documentation/ko-kr/unreal-engine/programming-subsystems-in-unreal-engine
- 수명이 관리되는 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 |