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()方法;

你可能感兴趣的:(Unreal 加载流程)