Unreal Engine에서 Subsystem은 엔진의 기능을 확장하고 유연성을 제공하는 중요한 요소입니다. 이번 글에서는 Subsystem의 개념과 사용 방법에 대해 알아보겠습니다.
- Subsystem이란?
- Subsystem은 Unreal Engine에서 엔진의 기능을 모듈화하고 확장하기 위한 개념입니다.
- 각 Subsystem은 특정 기능을 담당하며, 이를 통해 사용자가 엔진 클래스를 수정하거나 오버라이드하지 않고도 기능을 확장할 수 있습니다.
- 사전적 의미
- 시스템을 구성하는 요소의 하나로, 그 자체로도 시스템을 형상하고 있는 것
- 시스템이 커지면 내부를 다시 작은 시스템으로 나누어 생각하도록 하여, 설계나 관리에도 용이할 수 있도록 하는 개념
- Subsystem의 구조
- Subsystem은 C++ 클래스로 구현되며, FSubsystemCollectionBase를 상속받습니다.
- 각 Subsystem은 엔진의 원본 시스템에서 관리되고 초기화됩니다.
- 자동으로 인스턴스가 생성됩니다.
- 클래스를 인스턴스화 하기 위해 빌드나 코드, 메타 데이터 어디에도 작업하지 않아도 됩니다.
- Subsystem은 FSubSystemCollection 컨테이너에서 관리되며, SubsystemClass는 TMap에 저장됩니다.
- Subsystem은 타입에 따라 여러 개를 생성할 수 있습니다.
- Subsystem의 생명주기
- Subsystem은 엔진이 시작될 때 초기화되고, 종료될 때 정리됩니다.
- 초기화는 CDO(클래스 디폴트 오브젝트) 단계에서 호출되며, 생성 여부는 ShouldCreateSubsystem() 함수에 의해 결정됩니다.
- 종료는 Subsystem이 더 이상 필요하지 않을 때 호출됩니다.
- 어떤 Subsystem을 상속 받는지에따라 생명주기가 달라집니다.
- Subsystem의 종류
- UGameInstanceSubsystem
- ULocalPlayerSubsystem
- UWorldSubsystem
- UEngineSubsystem
- UEditorSubsystem
- Subsystem의 활용
- C++에서 Subsystem 호출: 각 원본 시스템에 내가 원하는 Subsystem이 있는지 찾아오는 방식을 사용합니다.
- Blueprint에서 Subsystem 호출: 원하는 Subsystem 함수를 호출하기 위해 해당 Subsystem을 선택하고 원하는 Task를 생성하면 됩니다.
- Subsystem 사용 이유
- 엔진 클래스 오버라이드를 피할 수 있어 프로그래밍 시간을 절약할 수 있습니다.
- 언리얼 마켓 제공자가 Subsystem을 사용하면, 그것을 사용하는 유저가 엔진 클래스 오버라이드를 피할 수 있다.
- 제공하고자 하는 기능이 GameInstance, GameMode에 추가적인 로직이 필요하다면, 액터를 제공하는 것만으로는 충분치 않음.
- 가이드 문서 량의 증대를 야기함.
- 기능 분리 가능
- 사용자에게 친숙한 방식으로 기능에 접근할 수 있도록 합니다.
- 코드베이스의 모듈성과 일관성을 제공합니다.
- 이미 바쁜 클래스에 API 추가를 피할 수 있습니다.
- 에디터 스크립팅이나 테스트 코드 작성을 위해 Python Script에서 엑세스 할 수 있습니다.
- 엔진 클래스 오버라이드를 피할 수 있어 프로그래밍 시간을 절약할 수 있습니다.
- Subsystem의 단점
- UnrealEngine의 Lifetime을 잘 이해하고 사용해야 합니다.
- 클래스에 접근하는 스타일을 다시 한번 상기해야 합니다.
- XXXManager::GetInstance().~~~ 불가.
- 정리
- Subsystem은 Unreal Engine에서 기능을 모듈화하고 확장하기 위한 중요한 요소입니다.
- Subsystem은 엔진의 기능을 수정하거나 오버라이드하지 않고도 확장할 수 있는 유연성을 제공합니다.
마무리: Subsystem은 Unreal Engine에서 강력한 기능 확장 도구로 활용될 수 있습니다. Unreal Engine 프로젝트에서 Subsystem을 적극적으로 활용하여 생산성을 높이고 코드의 일관성을 유지하는 데 도움이 될 것입니다.
SlideShare : https://www.slideshare.net/TonyCms/unrealsubsystempptx
참고 자료
1. 언리얼 공식 문서
3. 해외 블로그
'UnrealEngine' 카테고리의 다른 글
GameplayTag (0) | 2023.02.06 |
---|---|
GameAbilitySystem 기본 (0) | 2023.01.01 |
Actor 개념 정리 (0) | 2022.12.18 |