
C++의 기본 구조로써 main()부터 시작하게된다.
초기화 -> 작성한코드 -> 종료(정리) 순으로 간결하게 정리됀다.
하지만 언리얼에서 게임코드를 작성하는경우 이런 루프를 직접적으로 작성하지 않는다.
메인함수부터 시작하는 것이 아니라, GameMode 서브클래스를 정의하고 InitGame()등을 오버라이드 해서 시작한다.
액터의 경우 BeginPlay()나 Tick()을 정의하는 경우다.

<FEngineLoop 구조>
엔진을 시작하는데 있어 여러 복잡한 상속,로우 레벨단의 코드들이 있겠지만,
엔진의 메인은 FEngineLoop 클래스에 구현되어 있다.

이전 C++구조사진과 비슷한 초기화 -> 작성한코드 -> 종료(정리) 순으로 되어있다.
PreInit -> Init -> Exit순으로 알아보겠다.
PreInit : 모듈 로드
.uproject 혹은 .uplugin에 미리 정의한 모듈들을 불러온다.
코드간의 종속성을 관리하게 쉽게만들고, 필요한부분만 로드할수있도록 해준다.

언리얼 엔진은 실행 시 로우 레벨 엔진 필수 모듈 → 사전 정의된 엔진 모듈 → 상위 레벨 모듈 → 디폴트 게임 모듈 순서로 로딩
이 중 디폴트 게임 모듈 로딩 시점에 우리가 작성한 C++ 코드가 실제로 언리얼 엔진 환경에 등록되고 실행 준비 상태가 된다.
해당 시점에는 모든 모듈의 생성과 초기화가 완료되었지만,
월드(World) 및 GameMode·GameState와 같은 실제 게임 상태 객체는 아직 생성되지 않은 단계이다.
이후 GameInstance 생성 및 맵 로딩 과정을 거치면서 로딩된 모듈들의 클래스를 사용하는것이다.
모듈이 로드될때?

엔진은 해당 모듈에 정의된 모든 UObject 클래스를 등록함.
그러면 리플렉션 시스템(C++ 코드를 런타임에 이해하고 다룰 수 있게 해줌)이 해당클래스들을 인식하고, 각 클래스에 대한 CDO(클래스 기본 객체)도 생성함.
모든 클래스가 등록되면 StartupModule()과 ShutdownModule()로 모듈의 생명주기와 관련된 초기화작업을 합니다.
=======PreInit =======
이까지 하면 엔진은
필요한 플로그인 및 모듈을 로드하고,
클래스를 등록하고,
로우레벨 시스템단을 초기화 했습니다.
Init : 초기화

1. 어떤 게임엔진클래스를 사용할건지
2. 그 클래스의 인스턴스를 생성하고 전역적으로 접근할 수 있는 UEninge클래스로 정의합니다.
3. 엔진초기화( UGameEning,UGameInstance,UGameViewportClient,ULocalPlayer 생성)
4. 완료되면 전역델리게이트를 통해 엔진을 초기화되었음을 알리고
5. PostLoading 객체들을 로드합니다.
6. 엔진실행
과정을 거친다

6번과정인 GEninge->Start()에서 실제 LoadMap을 처음호출하게 되고,
UWorld,AGameModeBase,APlayerController등이 생성됀다.
*생애주기
1번박스는 엔진프로세스의 생애주기를 담당하고
2번박스는 해당 맵에 플레이 하는동안만 담당한다.
* 에디터에서 .umap저장할때 정보(해당 정보들로 직렬화한 url로 저장한 맵을 불러오는것)


이후 LoadMap()에서 액터 초기화 및 맵을 로딩 후 BeginPlay()가 실행되는 것이다.
이까지의 과정은 글로적어놓으니 어려울수도 있는데 영상의 18:44부분 부터 쉽게 설명되어있다.
https://www.youtube.com/watch?v=IaU2Hue-ApI&t=9s
해당 영상을 보고 내가 이해하기 쉽도록 다시 써본 글입니다.
'Unreal5 > 기본개념' 카테고리의 다른 글
| [UE5] 인터페이스 VS 이벤트 디스패쳐 사용처 (0) | 2025.12.27 |
|---|---|
| [에디터 언어] 영문 써야하는 이유 (0) | 2025.09.30 |
| [언리얼5] DECLARE_(DYNAMIC)_MULTICAST_DELEGATE_TwoParams 차이 (0) | 2025.08.03 |
| [최적화] Render 관련 순서(Game, Render, Anim...) (4) | 2025.08.02 |
| [최적화] 오브젝트 풀링 (6) | 2025.08.02 |