文章目录
- 概述
- main(主函数)
- CommonUnixMain(unix平台通用函数)
- GuardedMain(引擎主函数)
- AppExitCallback(退出调用)
- 小结
概述
本篇主要写下Linux下UE的启动流程,主要还是代码流程。从最开始的main函数,到最后的引擎层的启动退出,至于中间加载UE引擎各个插件的内容,不是这篇的主要内容。
main(主函数)
从简单的hello,world到一个复杂的程序的拆解过程,都是从main函数开始。接下来看看main函数。
先找到runtime,然后在招的Launch下边各个平台的启动。要找各个平台的main,都在对应的文件夹下。这里以linux为例。
CommonUnixMain(unix平台通用函数)
可以看到,main函数里,有一个CommonUnixMain函数;
有几个参数,第一个参数argc,是第二个参数argv数组的数量;第二个参数argv,是一个数组;第三个参数realMain,是下一个调用的一系列函数的函数链;第四个参数,是一个退出回调。
这些内容,看下英文注释,基本上可以看明白;接下来看下具体的函数内容。函数内容是根据参数来的,从第一个,第二个参数开始吧;
这段代码把argc,argv给解析出来;主要是argv,然后存到一个变量GSavedCommandLine里;
在看下realMain,
如上图,上边处理完的argv的参数,也就是命令行参数,作为参数给第三个函数GuardedMain。
GuardedMain(引擎主函数)
来看看这个函数,其实这个函数内部主要封装了几个函数,如下:
- EnginePreInit
- SlowTask.EnterProgressFrame(80);
- SlowTask.EnterProgressFrame(20);
- EditorInit/EngineInit
- EngineTick
- EditorExit/EngineExit
其实,就是引擎预初始化(EnginePreInit),初始化(EditorInit/EngineInit),循环(EngineTick),退出(EditorExit/EngineExit)。
如上图,是预初始化,还有引擎/编辑器初始化的代码;可以看到,在预初始化的时候,有个命令行参数,也就是说,有关命令行参数的操作,大概率都是在这里处理的;具体逻辑不是本篇的重点,以后有空看看。
这个是循环,退出的代码。第一个里边的退出是编辑器退出,第二个里边的是引擎的退出。退出肯定会有大批的流程,不是一两句话说明白的。不细说。
AppExitCallback(退出调用)
这个函数比较简单,主要是退出函数,回调到LaunchUnix_FEngineLoop_AppExit函数;这个函数的调用,如下图:
这个函数最终会调用到相应平台的退出函数。具体实现,看一下就知道了。跨平台的内容,对应的代码理顺了,没有那么难。
小结
本篇主要写了linux平台下的ue的代码调用流程。主要从主函数(main),平台通用函数(CommonUnixMain),引擎主函数(GuardedMain),退出调用(AppExitCallback)这几个方面写的。看完这篇,相信没看过或者理过这块的人思路应该清晰了不少。按照这个顺序,去理解其他平台,应该也会轻松很多。但是,毕竟还是涉及到一些C++的基础,这块,可以参考学习学习。至于其他的流程,有空可以自己理理。OK,这篇结束!