언리얼 엔진 워크플로우를 검색해보면 꼭 따라오는 이미지가 있다.
(워크플로우, 게임 플로우 등으로 검색하면 나온다)
바로 위의 Flow Chart인데, 에디터 / 스텐드얼론 (패키징) 에서 게임이 어떻게 실행되는지에 대해 간략히 설명해준다.
사실, 해당 과정들을 간략히만 알아도 큰 문제는 없었으나 연차가 얼추 붙으면서 좀 정리를 할 필요가 있을거같아 정리를 해둘까 한다.
해당 자료는 MS Copilot과 공식 문서 등을 참고하여 제작되었습니다.
틀린점이 있다면 지적바랍니다.
Editor 관점
Editor 관점은, 언리얼 에디터를 실행하고, PIE (Play In Editor)로 게임을 실행하기까지의 과정을 의미한다.
[1] UEditorEngine Initialize 단계
쉽게 설명해서, Editor를 구성하는 단계라고 볼 수 있다.
1. Editor Modules Initialize :
에디터에서 사용되는 모듈 초기화. 레벨 에디터, 블루프린트 편집기, 머티리얼 편집기 등 에디터 기능들이 포함됨.
2. 프로젝트 파일 열기:
사용자 프로젝트 파일을 로드하고, 필요한 에셋들을 초기화.
3. Config 파일 로드:
엔진 설정과 프로젝트 설정에 필요한 config 파일을 로드. DefaultEngine.ini 파일 등을 불러오는 과정.
4. Editor 세계 생성:
에디터에서 사용할 UWorld 인스턴스 생성
5. 플러그인 로드:
에디터에서 필요한 플러그인들을 로드.
6. 레벨 브라우저 및 콘텐츠 브라우저 초기화:
사용자가 에디터에서 접근할 수 있는 다양한 브라우저를 초기화.
7. 뷰포트 설정
에디터의 뷰포트를 초기화, 사용자에게 보여질 화면을 설정.
8. 리스너 설정:
에디터 이벤트에 대한 리스너들을 설정.
여기서 리스너는 키보드, 마우스 등의 입력장치 뿐만 아니라, "에디터의" UI 이벤트, 파일 IO시 발생하는 이벤트를 의미.
9. 게임 인스턴스 생성:
UGameInstance를 베이스로 하는 게임 인스턴스 클래스를 선택 후 인스턴스 생성
해당 인스턴스는 개발 중의 게임 상태를 관리할때 사용하는 게임 인스턴스임.
[2] UEngine Start 단계
게임 엔진 초기화가 끝나고, 실제로 시작하는 단계라고 볼 수 있다.
1. 엔진 초기화 확인:
모든 필수 모듈과 시스템이 올바르게 초기화되었는지 확인.
2. 로그 시스템 설정:
로그 및 디버그 시스템을 설정합니다. 로그 레벨 (Error, Warning 등)을 정의하는 단계.
3. 렌더링 초기화:
GPU 와 관련된 렌더링 시스템 / 리소스를 초기화하고, 렌더러를 설정.
렌더러, 쉐이더, 텍스쳐 및 모델을 설정하고 초기화하는 단계이기도 함.
4. 입력 시스템 초기화:
입력 장치 및 매핑을 초기화. 입력 매핑을 설정하고, 입력 이벤트를 처리할 수 있도록 세팅.
5. 오디오 시스템 초기화:
하드웨어 오디오 장치와 관련된 리소스 초기화, 사운드 파일 경로 설정 및 파일 로드.
6. 네트워크 시스템 초기화:
서버와 클라이언트 연결을 설정하고, 네트워크 프로토콜을 초기화하며, 온라인 세션을 관리.
7. 콘솔 명령어 등록:
디버깅과 테스트를 위한 콘솔 명령어를 등록. 엔진 내에서 다양한 명령어를 사용할 수 있도록 설정.
8. 게임 인스턴스 초기화:
이전 단계에서 생성된 게임 인스턴스 (PIE UGameInstnace) 를 초기화. 게임 인스턴스 내의 서브시스템 초기화, 각종 이벤트 리스너 바인딩 등을 수행
9. 월드 생성 및 초기화:
게임 내의 월드를 생성하고 초기화. 맵을 로드하고, 월드 내의 객체들을 스폰하며, 게임플레이를 위한 환경을 조성.
[3] PIE 활성화 단계
Create UGameInstance 및 Initialize PIE로 설명되어있으나, 구체적으로는 조금 다른듯 하다.
1. PIE 세션 설정: (Create UGameInstacne -> Initialize PIE 단계)
이미 생성된 UGameInstnace가 PIE 모드에서 실행 될 수 있도록 네트워크, 세션 설정등을 적용.
2. PIE 게임 인스턴스 시작: ( (UGameInstance) Init 단계 )
게임 인스턴스 (PIE UGameInstnace) 에 대한 추가적인 초기화 진행. 게임 데이터 및 리소스를 로드하거나 설정 적용.
UEngine Start에서 수행한것과 유사하나 PIE에 맞는 세팅이 추가적으로 진행되는것으로 보임.
3. (UEditorEngine) CreatePIEGameInstance:
이미 초기화된 UGameInstance를 PIE 모드로 전환하기 위한 설정을 하고, UEditorEngine에서 PIEGameInstance를 실행할 준비를 수행. PIE모드에서 실제 게임 플레이를 시뮬레이션하기 위한 추가 설정 및 조정이 이루어짐.
이 과정에서는 CreatePIEGameInstance (정확히는 UEditorEngine 클래스에서 PreCreatePIEInstances 함수가 호출되며 생성되는것으로 보임) 가 호출되어 PIE용 UGameInstance가 생성됨.
4. PIE 모드 월드 초기화: ( (UEditorEngine) StartPIEGameInstance 단계 )
레벨 로드, 객체 생성 등 기본적인 월드 구성을 수행
Standalone 관점
Standalone 모드에서는 PIE가 아닌 독립적으로 실행되는 프로그램으로써 진행된다.
[1] 엔진 시작 단계:
해당 단계는 Start Engine -> (UGameEngine) Init 단계를 의미한다.
1. 엔진 시작:
Standalone 모드로 엔진을 시작. 엔진 기본 설정이 로드되고 초기 작업 수행.
2. 필수 모듈 로드:
RenderCore, InputCore 등 각종 모듈들이 로드 되는 과정
3. 기본 설정 초기화:
각종 Config 파일들 (DefaultEngine.ini 파일 등)을 불러오는 과정
4. 엔진 초기화 확인: (UGameEngine Init 단계)
필수적인 모듈과 시스템이 올바르게 초기화되었는지 확인.
5. 로그 시스템 설정:
로그 및 디버그 시스템을 설정합니다. 로그 레벨 (Error, Warning 등)을 정의하는 단계.
6. 렌더링 초기화:
GPU 와 관련된 렌더링 시스템 / 리소스를 초기화하고, 렌더러를 설정.
렌더러, 쉐이더, 텍스쳐 및 모델을 설정하고 초기화하는 단계이기도 함.
7. 입력 시스템 초기화:
입력 장치 및 매핑을 초기화. 입력 매핑을 설정하고, 입력 이벤트를 처리할 수 있도록 세팅.
8. 오디오 시스템 초기화:
하드웨어 오디오 장치와 관련된 리소스 초기화, 사운드 파일 경로 설정 및 파일 로드.
9. 네트워크 시스템 초기화:
서버와 클라이언트 연결을 설정하고, 네트워크 프로토콜을 초기화하며, 온라인 세션을 관리.
10. 콘솔 명령어 등록:
디버깅과 테스트를 위한 콘솔 명령어를 등록. 엔진 내에서 다양한 명령어를 사용할 수 있도록 설정.
[2] UGameInstance 준비 단계:
Create UGameInstance -> InitializeStandalone -> UGameInstance Init 단계를 의미
1. 게임 인스턴스 생성:
UGameInstance를 베이스로 하는 게임 인스턴스 클래스를 선택 후 인스턴스 생성.
메모리 할당 및 객체 초기화도 이루어짐
2. 독립 실행 모드 설정:
Standalone 모드에서 게임 인스턴스를 초기화하는 과정.
네트워크 설정, 게임 데이터 로드 등 독립 실행 모드에 필요한 추가 설정이 적용됨.
3. 서브시스템 초기화:
Standalone 모드에서 필요한 다양한 서브시스템을 초기화. 세이브 데이터 시스템, 네트워크 관리 시스템 등이 포함됨.
4. 게임 로직 초기화:
UGameInstance 내에서 기본적인 게임 로직을 초기화. 게임 상태 초기화, 플레이어 데이터 로드 등이 포함됨.
5. 이벤트 바인딩:
게임 인스턴스와 관련된 다양한 이벤트에 대한 리스너를 설정하고 바인딩.
게임 시작, 종료, 일시정지 등의 이벤트에 대한 리스너 및 처리기를 등록.
[3] 네트워크 준비 단계:
Create UOnlineSession and register delegates 과정을 의미. 선택사항.
1. 온라인 세션 생성 :
네트워크 플레이를 지원하는 경우, 새로운 온라인 세션을 생성하고 서버와 클라이언트 연결을 설정함.
2. 대리자(Delegate) 등록:
온라인 세션에서 발생하는 다양한 이벤트를 처리하기 위해 대리자(delegate)를 등록.
플레이어가 세션에 참가하거나 나갈 때 호출될 함수들을 설정함.
[4] UEngine Start 단계:
기본적으로 초기화 단계는 Init 단계와 유사하나, 일부 다른점이 있음.
1. 모듈 초기화:
Init 단계에서 수행한 과정과 유사함.
2. 게임 인스턴스 시작:
이전 단계에서 생성된 게임 인스턴스를 시작. 게임의 전반적인 상태를 관리하고, 게임 로직을 실행할 준비를 수행.
3. 월드 생성 및 초기화:
게임 내의 월드를 생성하고 초기화. 맵을 로드하고, 월드 내의 객체들을 스폰하며, 게임플레이를 위한 환경을 조성.
이후에는 둘다 동일하게 BeginPlay부터 시작하는 과정을 거친다.
해당 과정은 또 따로 정리할 필요가 있어 여기서는 설명하지 않는다.
'게임 개발 > Unreal' 카테고리의 다른 글
짐벌락과 기타등등 (0) | 2024.09.12 |
---|---|
지금까지 받은 언리얼 관련 면접자료 (v24.09.01) (0) | 2024.09.01 |
(UnrealEngine 5.3 or Higher) EnhacedInput과 AbilitySystem 연동 (0) | 2024.08.16 |
짧막 팁 : AbilitySystem 관련 헤더를 불러오지 못할때 (0) | 2024.08.12 |
2D 작업 관련 메모 (0) | 2024.08.09 |