一、AGameMode
1、AGameMode实现接口
(1)Class登记
(2) 游戏内实体的Spawn
(3) 游戏的进度
(4)Level的切换
(5)多人游戏的步调同步
(6)AGameModeBase->针对单机,AGameMode->针对多人联机
2、哪些逻辑应该写在GameMode里?哪些应该写在Level Blueprint里?
(1)概念上,Level是表示,World是逻辑,LevelScriptActor应该专注于本Level的表示逻辑,GameMode应该专注于玩法
(2)组合上,GameMode是可以应用在不同的Level的,所以通用的玩法应该放在GameMode里。
(3)GameMode只在Server存在(单机游戏也是Server),对于已经连接上Server的Client来说,因为游戏的状态都是由Sever决定的,Client只是负责展示,所以Client上是没有GameMode的,但是有LevelScriptActor,所以GameMode里不要写Client特定相关的逻辑。
跟下层的PlayerController比较,GameMode关心的是构建一个游戏本身的玩法,PlayerController关心的玩家的行为。
(4)跟上层的GameInstance比较,GameInstance关注的是更高层的不同World之间的逻辑。把不同GameMode之间协调的工作交给GameInstance,而GameMode只专注自己的玩法世界。
二、AGameState
1、PlayerState是玩家自己的游戏数据,GameInstance是程序运行的全局数据
2、GameState在网络环境里可以Replicated到多个Client上面去
3、AGameStateBase->针对单机,AGameState->针对多人联机