【UE4】虛幻引擎執行流程
阿新 • • 發佈:2021-11-13
各個平臺啟動引擎的入口函式
- 程式碼路徑:
Engine\Source\Runtime\Launch\Private\
引擎入口函式 GuardedMain()
- 程式碼路徑:
Runtime/Launch/Private/Launch.cpp
- 執行引擎四大階段的流程:EnginePreInit 、EngineInit 、EngineLoop、EngineExit 。執行流程圖如下所示
EnginePreInit 引擎預初始化
實際上呼叫 FEngineLoop::PreInit
,再呼叫 PreInitPreStartupScreen
和 PreInitPostStartupScreen
,從而實現許多初始化和核心模組相關的事情
PreInitPreStartupScreen 裡的執行流程
- 先進行各種初始化,如解析command引數、trace、stat(效能分析工具)、FModuleManager、IFileManager、FPlatformFileManager、各種路徑等
- 載入CoreUObject模組,啟動FTaskGraphInterface
- 通過LoadPreInitModules()
- 載入 Engine、Renderer、AnimGraphRuntime 模組
- 通過 FPlatformApplicationMisc::LoadPreInitModules()載入 D3D12RHI、D3D11RHI、OpenGLDrv等模組(根據所在平臺)
- 載入 SlateRHIRenderer模組(非伺服器下)
- 載入 Landscape、RenderCore 模組
- 載入 TextureCompressor、AudioEditor、AnimationModifiers 模組
- 通過 FEngineLoop::AppInit() 進行
- 本地化文字
- Init logging to disk
- init config system
- 通過 FConfigCacheIni::LoadGlobalIniFile 載入Engine、Game、Input 配置檔案
- 其他配置檔案還有:Editor、EditorPerProjectUserSettings、EditorSettings、EditorKeyBindings、EditorLayout、Lightmass、Scalability、Hardware、DeviceProfiles、GameUserSettings等
- Load "asap" plugin modules,為專案和外掛載入型別為 EarliestPossible 的模組
- 檢查專案和外掛模組資料,是否需要編譯
- 為專案和外掛載入型別為 PostConfigInit 的模組
- 初始化頭顯 PreInitHMDDevice();
- 列印初始化日誌
- 初始化其他系統 FCoreDelegates::OnInit.Broadcast();
- 設定遊戲主執行緒
- 執行緒池初始化(如果支援多執行緒)
- 非同步IO系統初始化(如果支援多執行緒)
- 系統設定system settings和 cvar 初始化,cvar從 ini 檔案獲取,含渲染引數、解析度、視窗模式等
- Scalability系統初始化 InitScalabilitySystem()
- 渲染執行緒 UseRenderThread()
- 平臺特定的初始化,如 FPlatformMisc::PlatformInit() 、FPlatformApplicationMisc::Init() 、FPlatformMemory::Init()
- IPlatformFeaturesModule::Get()
- 物理引擎初始化 InitGamePhys()
- 引擎本地化初始化 InitEngineTextLocalization()
- 開啟音訊執行緒 UseAudioThread
- 啟動介面顯示 FPlatformSplash::Show();
- 平臺應用程式建立 FSlateApplication::Create();伺服器模式下EKeys::Initialize()、FCoreStyle::ResetToDefault();
- RHI 初始化 RHIInit()
- RenderUtils初始化 RenderUtilsInit()
- FShaderCodeLibrary::InitForRuntime()
- FShaderPipelineCache::Initialize()
- Shader hash cache: InitializeShaderHashCache()
- GetRendererModule
- InitializeShaderTypes
- CompileGlobalShaderMap
- CreateMoviePlayer
- etc
PreInitPostStartupScreen 裡的執行流程
- 播放啟動動畫 GetMoviePlayer()->SetupLoadingScreenFromIni
- 載入PreEarlyLoadingScreen型別的專案模組
- 通過
FPreLoadScreenManager::Get()->Initialize()
呼叫UGameEngine::CreateGameWindow();
建立視窗
- 通過
- Pak 檔案獲取和掛載
- Config 檔案獲取和引數讀取
- SlateRenderer 初始化
- 載入 AssetRegistry 模組
- UObject classes 註冊和初始化
- PIEPreviewDeviceProfileSelector
- InitDefaultMaterials
- Initialize the texture streaming system
- 載入核心啟動模組 LoadStartupCoreModules,包括
- Core、Networking、Messaging
- MRMesh、UnrealEd、EditorStyle、LandscapeEditorUtilities
- SlateCore、Slate、SlateReflector、UMG
- MessageLog、CollisionAnalyzer、FunctionalTesting
- BehaviorTreeEditor、GameplayTasksEditor、StringTableEditor、VREditor、IntroTutorials、Blutility
- Overlay、MediaAssets、ClothingSystemRuntimeNv、ClothingSystemEditor、PacketHandler、NetworkReplayStreaming
- 通過LoadStartupModules 載入PreDefault、Default、PostDefault型別的模組
- 載入 PreLoadingScreen 型別的模組
- 為專案和外掛載入 PostEngineInit 型別的模組
- Online模組
- etc