UE4-001:引擎入口与主循环
UE4 Version: 4.26.2
Windows Platform
不考虑Editor相关代码
App入口
对于Windows平台,WinMain
为应用程序入口;
WinMain
所在的源文件为:
Engine/Source/Launch/Private/Windows/LaunchWindows.cpp
引擎C++入口
UE4支持跨平台,需要一个独立于各平台的入口函数:
GuardedMain为该入口函数,于WinMain中直接或者间接被调用;
GuardedMain
函数所在的源文件为:
Engine/Source/Runtime/Private/Launch.cpp
引擎整体调用流程:
在GuardedMain函数体内,会依次调用下面几个函数:
- EnginePreInit();
- EngineInit();
- EngineTick(); 循环调用
- EngineExit();
FEngineLoop类
在Launch.cpp源码中有一个全局对象FEngineLoop GEngineLoop
class FEngineLoop
所在源文件为:
Engine/Source/Runtime/Launch/Public/LaunchEngineLoop.h
引擎整体调用流程中的函数简单包装并调用GEngineLoop
对象的成员函数, 如下:
int32 EnginePreInit( const TCHAR* CmdLine )
{
int32 ErrorLevel = GEngineLoop.PreInit( CmdLine );
return( ErrorLevel );
}
int32 EngineInit()
{
int32 ErrorLevel = GEngineLoop.Init();
return( ErrorLevel );
}
void EngineTick( void )
{
GEngineLoop.Tick();
}
void EngineExit( void )
{
// Make sure this is set
RequestEngineExit(TEXT("EngineExit() was called"));
GEngineLoop.Exit();
}
涉及到的源码文件路径:
- Engine/Source/Runtime/Launch/Private/Windows/LaunchWindows.cpp
- Engine/Source/Runtime/Launch/Private/Launch.cpp
- Engine/Source/Runtime/Launch/Public/LaunchEngineLoop.h
- Engine/Source/Runtime/Launch/Private/LaunchEngineLoop.cpp
拓展,可以试着去翻看一下引擎的源码,探查一下其他平台的入口函数在那个源文件中,以及代码是怎么规划的。