UE5中 Character、PlayerController、PlayerState、GameMode和GameState核心类之间的联动和分工·

1. GameMode 与 GameState

关系描述
  • GameMode:定义游戏规则和逻辑,控制游戏的开始、进行和结束。
  • GameState:存储和同步全局游戏状态,如得分、时间、胜利条件等。
联动方式
  • GameMode初始化GameStateGameMode在游戏开始时创建GameState实例,并将全局游戏规则和状态信息存储在GameState中。
  • GameMode更新GameStateGameMode根据游戏规则更新GameState中的数据,例如增加得分或触发游戏结束。
  • GameState同步数据GameState将全局状态数据同步到所有客户端,确保所有玩家看到一致的游戏状态。

2. GameMode 与 PlayerController

关系描述
  • GameMode:控制玩家生成和游戏规则。
  • PlayerController:管理玩家输入和交互逻辑。
联动方式
  • PlayerController生成GameMode在玩家加入游戏时生成PlayerController实例,并将其分配给玩家。
  • PlayerController调用GameModePlayerController可以通过GameMode执行游戏规则,例如请求生成角色或触发游戏事件。
  • GameMode控制PlayerControllerGameMode可以禁用或启用PlayerController的输入,例如在游戏结束时禁用玩家移动。

3. PlayerController 与 Character

关系描述
  • PlayerController:管理玩家输入和交互逻辑。
  • Character:代表玩家在游戏世界中的实体。
联动方式
  • Character生成PlayerController在游戏开始时生成Character实例,并将其与玩家绑定。
  • PlayerController控制CharacterPlayerController接收玩家输入并将其转化为Character的动作,例如移动、跳跃或攻击。
  • Character反馈状态Character将自身状态(如生命值、位置)反馈给PlayerController,以便更新玩家界面或触发事件。

4. PlayerController 与 PlayerState

关系描述
  • PlayerController:管理玩家输入和交互逻辑。
  • PlayerState:存储和同步玩家个性化数据,如得分、生命值、装备等。
联动方式
  • PlayerState初始化PlayerController在玩家加入游戏时初始化PlayerState实例,并将其与玩家绑定。
  • PlayerController更新PlayerStatePlayerController根据玩家行为更新PlayerState中的数据,例如增加得分或更新装备。
  • PlayerState同步数据PlayerState将玩家数据同步到所有客户端,确保其他玩家看到一致的玩家状态。

5. GameState 与 PlayerState

关系描述
  • GameState:存储和同步全局游戏状态。
  • PlayerState:存储和同步玩家个性化数据。
联动方式
  • GameState汇总PlayerStateGameState可以汇总所有玩家的PlayerState数据,例如计算团队得分或排名。
  • PlayerState影响GameStatePlayerState中的数据变化(如玩家得分)可以触发GameState的更新,例如检查胜利条件。
  • 数据同步GameStatePlayerState中的数据通过网络复制同步到所有客户端,确保游戏状态和玩家状态的一致性。

6. 综合联动关系

  • GameMode 作为游戏规则的核心,控制GameStatePlayerController的生成与逻辑。
  • PlayerController 作为玩家与游戏世界的桥梁,管理CharacterPlayerState的行为与状态。
  • GameStatePlayerState分别管理全局和玩家的数据,并通过网络复制确保数据一致性。

示例:

此处以玩家之间建立组织的逻辑实现作为样例来表现Character、PlayerController、PlayerState、GameMode和GameState核心类之间的联动分工

步骤细节:

玩家的输入处理

PlayerController:负责处理玩家输入

但是Character类也能负责处理玩家输入

Character类蓝图处理逻辑

**PlayerController**类蓝图处理逻辑

有关将F输入放在Character优点与缺点

优点与缺点

优点
  • 直接访问Camera组件Character类可以直接访问其Camera组件,无需通过PlayerController
  • 逻辑集中 :将与角色行为相关的输入逻辑集中在Character类中,便于管理和维护。
缺点
  • 职责不清Character类通常用于实现角色行为,将输入逻辑放在其中可能违反职责分离原则。
  • 多人游戏复杂性 :在多人游戏中,Character类可能需要额外的网络同步逻辑,增加代码复杂性。

显然对比以上蓝图可见**PlayerController**类方法连线较多,函数调用开销也就较大,但是可通过缓存来解决此类问题如下图

因此在个人开发中,如果 PlayerController 类功能繁多,可以适当 根据个人需求将简单输入事件放入Character中,并不影响实现,但是在多人合作开发中,建议按照UE的功能职责划分将输入处理放入PlayerController 类中。

总结

CharacterPlayerControllerPlayerStateGameModeGameState之间通过紧密的联动关系,共同实现游戏的功能和规则。GameMode定义规则,GameState存储全局状态,PlayerController管理玩家输入,PlayerState存储玩家数据,Character代表玩家实体。它们相互协作,确保游戏逻辑的正确性和数据的一致性。

相关推荐
ue星空8 小时前
UE音频中间件wwise插件
学习·ue5·音视频
AgilityBaby2 天前
UE5打包项目设置Project Settings(打包widows exe安装包)
c++·3d·ue5·游戏引擎·unreal engine
AgilityBaby3 天前
UE5蓝图暴露变量,在游戏运行时修改变量实时变化、看向目标跟随目标Find Look at Rotation、修改玩家自身弹簧臂
笔记·游戏·ue5·游戏引擎·蓝图
努力的悟空3 天前
UE5.4.4+Rider2024.3.7开发环境配置
ue5
AgilityBaby4 天前
UE5蓝图中播放背景音乐和使用代码播放声音
c++·ue5·游戏引擎·蓝图
ue星空4 天前
UE利用RenderTaget在UI上渲染目标
ue5·蓝图
异次元的归来6 天前
UnLua源码分析(二)IUnLuaInterface
ue5·lua·unlua
吴梓穆6 天前
UE5.5 pixelstreaming插件打包报错
ue5
AgilityBaby7 天前
UE5 C++动态调用函数方法、按键输入绑定 ,地址前加修饰符&
开发语言·c++·3d·ue5·游戏引擎
远离UE47 天前
UE5 Niagara 如何让四元数进行旋转
ue5