Unreal 加载流程

Launch模块的Launch.cpp里GuardedMain为通常意义的Main函数,这里有游戏循环;

在这个函数里,首先调用GEngineLoop.PreInit(),这个函数完成所有底层模块和自定义模块以及插件的加载(这些模块被定义为早期加载);

然后调用GEngineLoop.Init(),这里生成了Engine实例,调用engine实例的Init()方法,然后加载了晚期模块和插件,然后又调用Start()方法;

在engine.Init()方法内部主要工作:创建GameInstance、GameViewportClient、LocalPlayer实例;

在engine.Start()方法内部主要工作:调用LoadMap()方法;

在engine.LoadMap()方法内部主要工作:

1、加载map包,生成UWorld,包括level、actor等;

2、调用UWorld的一些方法,如InitWorld(),这个方法配置物理、AI、声音等;还有SetGameMode()方法,这个方法生成了GameMode

3、加载始终要加载的子level;

4、调用world.InitializeActorsForPlay()方法,主要工作:

       ①、注册所有actor的component,并且,如果component是primitivecomponent类型,还会创建FprimitiveSceneProxy对象,该对象属于FScene(UWorld在渲染线程里的对应版本);

        ②、调用gameMode.InitGame(),生成GameSession对象;

        ③、循环调用所有level的RouteActorInitialize()方法,这里完成所有actor的初始化,其中GameMode也属于actor,因此会GameMode也会得到初始化,这时候会产生GameState对象;

 5、产生player;上文提到的LocalPlayer是引擎模块的,对应的在游戏模块里为APlayerController,这个过程产生playercontroller,并且产生spawn;

6、调用world.BeginPlay()方法;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容