繼承關系:
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++,因為可以清楚的勘定代碼的調用和代碼跟蹤