在UE引擎中,GameMode和GameState是两个重要的类,用于管理游戏的逻辑和状态。
AInfo
- 不可见: 在world中没有物理展示的Actor基类,
- 保存数据: 保存world中设置数据的管理类
- 实现复制: 可作为实现复制意图的Actor使用。
AGameModeBase
- 只在服务器上实例化,不会存在于客户端。
- 定义了游戏的核心逻辑和规则,得分,actor等
- DefaultPawnClass, HUDClass, GameStateClass, PlayerControllerClass,PlayerStateClass
- StartPlay(), HasMatchStarted(), SetPause();ResetLevel()
AGameMode
- 继承AGameModeBase, 负责MatchState和多玩家的控制逻辑
- 当作多人联机的默认实现
- 简单的单机就从AGameModeBase里继承
MatchState 枚举
- EnteringMap
- WaitingToStart
- InProgress
- WaitingPostMatch
- LeavingMap
- Aborted
AGameStateBase
- 管理游戏全局状态的类, 由GameModeBase创建
- 同时存在于客户端和服务器端,并且是完全复制(确保一致性)。
- 管理玩家状态和游戏的状态数据,同步所有到客户端和服务器
- 在网络环境里Replicated到多个Client上
AGameState
- 行为类似于多人匹配游戏。
- 游戏运行的一些数据,不想所有客户端可见,可写在GameMode中
GameMode(游戏模式)
- GameMode类定义了游戏的规则逻辑,以及玩家进入游戏的方式。
- 每个关卡(Level)都可以有一个关联的GameMode实例。
- GameMode可以管理玩家的生成、计分规则、游戏结束条件等。
- 可以通过创建自定义的GameMode类来扩展或修改游戏规则。
GameState(游戏状态):
- GameState类用于跟踪和同步游戏中的状态信息。
- 每个关卡(Level)都可以有一个关联的GameState实例。
- GameState可以存储和更新游戏的重要状态,如得分、时间、玩家列表等。
- GameState可以与其他系统共享游戏状态,如UI界面、网络同步等。
- 可以通过创建自定义的GameState类来添加自定义状态和逻辑。
GameMode和GameState关系:
- GameMode通常将GameState作为其成员变量,用于跟踪游戏状态。
- GameMode可以通过GameState来访问和修改游戏状态信息。
- GameState可以通过GameMode来调用和控制游戏逻辑。