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
代表玩家实体。它们相互协作,确保游戏逻辑的正确性和数据的一致性。