1. GameMode 与 GameState
关系描述
- GameMode:定义游戏规则和逻辑,控制游戏的开始、进行和结束。
- GameState:存储和同步全局游戏状态,如得分、时间、胜利条件等。
联动方式
- GameMode初始化GameState:
GameMode在游戏开始时创建GameState实例,并将全局游戏规则和状态信息存储在GameState中。 - GameMode更新GameState:
GameMode根据游戏规则更新GameState中的数据,例如增加得分或触发游戏结束。 - GameState同步数据:
GameState将全局状态数据同步到所有客户端,确保所有玩家看到一致的游戏状态。
2. GameMode 与 PlayerController
关系描述
- GameMode:控制玩家生成和游戏规则。
- PlayerController:管理玩家输入和交互逻辑。
联动方式
- PlayerController生成:
GameMode在玩家加入游戏时生成PlayerController实例,并将其分配给玩家。 - PlayerController调用GameMode:
PlayerController可以通过GameMode执行游戏规则,例如请求生成角色或触发游戏事件。 - GameMode控制PlayerController:
GameMode可以禁用或启用PlayerController的输入,例如在游戏结束时禁用玩家移动。
3. PlayerController 与 Character
关系描述
- PlayerController:管理玩家输入和交互逻辑。
- Character:代表玩家在游戏世界中的实体。
联动方式
- Character生成:
PlayerController在游戏开始时生成Character实例,并将其与玩家绑定。 - PlayerController控制Character:
PlayerController接收玩家输入并将其转化为Character的动作,例如移动、跳跃或攻击。 - Character反馈状态:
Character将自身状态(如生命值、位置)反馈给PlayerController,以便更新玩家界面或触发事件。
4. PlayerController 与 PlayerState
关系描述
- PlayerController:管理玩家输入和交互逻辑。
- PlayerState:存储和同步玩家个性化数据,如得分、生命值、装备等。
联动方式
- PlayerState初始化:
PlayerController在玩家加入游戏时初始化PlayerState实例,并将其与玩家绑定。 - PlayerController更新PlayerState:
PlayerController根据玩家行为更新PlayerState中的数据,例如增加得分或更新装备。 - PlayerState同步数据:
PlayerState将玩家数据同步到所有客户端,确保其他玩家看到一致的玩家状态。
5. GameState 与 PlayerState
关系描述
- GameState:存储和同步全局游戏状态。
- PlayerState:存储和同步玩家个性化数据。
联动方式
- GameState汇总PlayerState:
GameState可以汇总所有玩家的PlayerState数据,例如计算团队得分或排名。 - PlayerState影响GameState:
PlayerState中的数据变化(如玩家得分)可以触发GameState的更新,例如检查胜利条件。 - 数据同步:
GameState和PlayerState中的数据通过网络复制同步到所有客户端,确保游戏状态和玩家状态的一致性。
6. 综合联动关系
- GameMode作为游戏规则的核心,控制
GameState和PlayerController的生成与逻辑。 - PlayerController作为玩家与游戏世界的桥梁,管理
Character和PlayerState的行为与状态。 - GameState和PlayerState分别管理全局和玩家的数据,并通过网络复制确保数据一致性。
示例:
此处以玩家之间建立组织的逻辑实现作为样例来表现Character、PlayerController、PlayerState、GameMode和GameState核心类之间的联动分工

步骤细节:
玩家的输入处理
PlayerController:负责处理玩家输入
但是Character类也能负责处理玩家输入
Character类蓝图处理逻辑

PlayerController类蓝图处理逻辑

有关将F输入放在Character优点与缺点
优点与缺点
优点:
- 直接访问
Camera组件:Character类可以直接访问其Camera组件,无需通过PlayerController。 - 逻辑集中:将与角色行为相关的输入逻辑集中在
Character类中,便于管理和维护。
缺点:
- 职责不清:
Character类通常用于实现角色行为,将输入逻辑放在其中可能违反职责分离原则。 - 多人游戏复杂性:在多人游戏中,
Character类可能需要额外的网络同步逻辑,增加代码复杂性。
显然对比以上蓝图可见PlayerController类方法连线较多,函数调用开销也就较大,但是可通过缓存来解决此类问题如下图

因此在个人开发中,如果 PlayerController 类功能繁多,可以适当根据个人需求将简单输入事件放入Character中,并不影响实现,但是在多人合作开发中,建议按照UE的功能职责划分将输入处理放入PlayerController 类中。
总结
Character、PlayerController、PlayerState、GameMode和GameState之间通过紧密的联动关系,共同实现游戏的功能和规则。GameMode定义规则,GameState存储全局状态,PlayerController管理玩家输入,PlayerState存储玩家数据,Character代表玩家实体。它们相互协作,确保游戏逻辑的正确性和数据的一致性。


















