Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

게임 개발 메모장

[ UE5 ] 언리얼 서브시스템 본문

언리얼 엔진/기능

[ UE5 ] 언리얼 서브시스템

Dev_Moses 2024. 1. 6. 14:45

Subsystem 활용한 언리얼 스타일 싱글톤

 

Singleton 패턴은 많은 짐이 있지만 무시할수 없는 기능성이 있다.

다행히도 Unreal Engine은 결점이 적은 방식으로

Singleton의 이점을 제공할 수 있는 방법이 있다.

 

나쁜 방식: C++ Static Singleton

 

C++ static class singleton의 장단점

 

(장점)

프로그래머들이 즐겨사용하는 인터페이스

 

(단점)

잘못된 에디터와 상호작용
작업이 없다면, 에디터에서 게임이 여러번 실행되는 동안의 인스턴스들이 보존된다.

 

Class Default Object(CDO)와 잘못된 상호작용 

작업이 없다면, CDO가 생성될때 인스턴스가 생성된다.

 

라이프타임이 불분명

주의 깊은 프로그래밍과 라이프타임 관리를 위해 분명한 의도가 필요하다.

 


Unreal Subsystem

 

Unreal Engine은 Unreal Subsystem 이라 불리는 것이 있다.

이 서브시스템들은 글로벌하게 억세스가능한 모듈을 생성하는데 사용되며

명확한 라이프사이클을 갖는다.

 

서브시스템의 라이프타임은 부모 클래스의 라이프타임을 따른다.

아래 표에서 보는 것과 같이 5가지의 부모가 있다.

 

Subsystem 부모 클래스 라이프타임
Engine UEngineSubsystem editor, in-game 모두, I think.
Editor UEditorSubsystem Editor 시작
GameInstance UGameInstanceSubsystem 게임이 시작되하자 마자, 게임이 종료될때까지 유지
LocalPlayer ULocalPlayerSubsystem ULocalPlayer의 라이프타임과 동일하며 레벨 이동에 따라 이동된다.
World UWorldSubsystem UWorld와 동일하며,  레벨별로 존재

 

장점

1. 라이프타임이 자동으로 관리 된다.

: 올바른 Subsystem을 사용하는 것으로 인스턴스의 생성됨과 파괴됨이 보장된다.

 

2. 바라는 라이프타임을 명확히 할 수 있다.

: UWordlSubsystem을 상속받은 Subsystem은

  World가 존재하는 만큼 존재 할 수 있음이 명확하다.

 

3. 더명확한 블루프린트 억세스.

 

4. Python 스크립트로 억세스 가능.

 

단점

1. Unreal 크래스들의 라이프타임에 대한 이해가 필요하다.

2. MyClass::GetInstance()대신에 Unreal의 억세스 스타일을 학습해야 한다.


C++로 Subsystems 억세스

Subsystem Base Class