继承关系:
Aactor,INavAgentInterface <--- AController<--- PlayerController ,
PlayerController也是一个Actor,继承了Actor的一些通用的属性和工具函数
下图是PlayerController初始化组件的一个子阶段
从图中可以得到的信息是:函数是PlayerController的一个组件初始化阶段函数,函数中包含三个比较重要的函数调用,
1.InitPlayerState
该函数中,通过 World对象调用SpawnActor创建了APlayerState,赋值到PlayerState,也就是说PlayerController间接的创建的PlayerState,并持有其引用,PlayerState是GameMode中添加的那个
2.SpawnPlayerCameraManager
函数创建了APlayerCameraManager,字面意思是玩家的相机管理类,处理相机相关的逻辑,程序运行时创建的默认相机,应该就是该类创建的,具体是怎么创建的相机实体(CameraActor)这块的逻辑就不继续跟下去了,同时也是使用的World对象调用SpawnActor创建的实体
3.SpawnDefaultHUD
函数创建了HUD,这块解释一下,HUD是头显的意思,和UI的区别就是HUD不具备用户交互的功能,他只是显示,UI是用户交互接口的意思,提供一些交互的接口,比如按钮,toggle等,GameMode默认设置HUD类,上图表明了HUD 再PlayerController的PostInitializeComponents函数中被创建
总结: 程序开始,初始化GameMode,初始化PlayerController,PlayerController 创建PlayerState,创建HUD,创建CameraManager,并且持有它的引用,所以PlayerController相当于游戏管理类,它可以引用到各个实体,如果GameMode编辑器上没有添加对应的类,那PlayerController会创建一个对应的默认类型,如果存在,则创建被添加的类的实例,总之程序的流程不变,playercontroller始终会创建PlayerState,CamaraManager,HUD
通过阅读源码,又学到了一个创建Actor的api,SpawnActor
通过FActorSpawnParameters结构体孵化参数创建
欧克,接下来的学期就比较快了,知道了GameMode的运作原理,Pawn,Actor,ActorComponent,这些东西之后,后面的学习无非就是一些新的组件和功能的拓展,先对于蓝图来说,我比较推荐先学习C++,因为可以清楚的勘定代码的调用和代码跟踪