六一的部落格


行百里者半九十




world, actor和component

世界场景由actor对象组成, actor对象由各种component组成



控制器: APawn类和APlayerController类



APawn类

派生自AActor, 实现了对actor对象的控制

接收来自输入设备的信息, 使actor对象做出相应动作

无视觉表示, 逻辑类

pawn就是棋子的意思, 如控制游戏角色前后左右移动, 通常通过APawn类完成

生存期与actor对象一致

在actor的基础上, 支持交互


APlayerController类

派生自AController, AController派生自AActor

生存期与关卡一致

如果游戏玩家可以控制多个actor对象, 则会通过APlayerController切换当前操作的actor对象, 或者不操作任何一个actor对象

采用组合(composite)模式, APawn作为APlayerController的组件

接收来自输入设备的信息, 通常使用APlayerController处理全局控制, 如关闭菜单, 关闭声音, 退出游戏等


关卡规则: AGameModeBase类

游戏规则, 针对关卡而言

支持各种设置, 且都有默认值: 包括游戏时长设置, 玩家和NPC个数, 团队分布, 玩家的重生机制等

在关卡编辑器的世界设置中, 可对game mode进行配置

  • 使用默认值时, 显示为None



游戏角色: ACharacter类

派生自APawn, 实现了游戏角色相应功能:

  1. 增加了碰撞检测功能

    胶囊组件capsule component, 负责与外界的物理交互
  2. 增加了骨骼网格体组件skeletal mesh, 可以设置模型和动画
  3. 增加了角色移动组件character movement, 控制角色的移动, 如速度, 跳跃高度等


在pawn的基础上, 支持骨骼网格体, 运动和碰撞


AI: AIController类

派生自AController

APawn既可以由玩家控制, 也可以由AI控制: 采用组合(composite)模式, APawn作为AIController的组件

在行为树中给出任务



HUD类

head up display

负责用户界面, 目前使用较少

虚幻引擎通过widget提供用户接口, 可以用HUD来管理widget


观察者: ASpectatorPawn类

观察者类

角色死亡时, 玩家所控制的pawn

通常情况下, 为flying camera, 可以设置其为黑白效果


玩家信息: APlayerState类

负责存储玩家的各种统计信息, 如击杀人数, 死亡次数

生存期与关卡一致


游戏信息: AGameState类

多人游戏逻辑使用

多人游戏中, game mode base存在于服务器端, 保存各种信息, 将游戏过程中的玩家信息传输给客户端


游戏: UGameInstance类

游戏实例类

会创建该类型的全局变量

一些全局信息, 如和关卡无关的图形设置, 声音设置, 及其他直接加载到关卡的信息, 需要作为全局信息保存

可以创建game instance的派生类, 包含保存以上信息的变量

在项目设置中, 配置使用game instance的派生类



总结


  1. 有三种生存期, actor对象的生存期, 关卡生存期, 和游戏实例生存期
  2. 游戏包含多个关卡, 关卡类型为AGameModeBase, AGameModeBase对象负责创建所有关卡基本对象
    • APawn
    • APlayerController
    • ASpectatorPawn
    • APlayerState
    • AGameState
    • AHUD
  3. 打开关卡时, game mode base对象被创建, 其创建关卡基本对象
  4. 整个游戏中, 在所有关卡之上, 有UGameInstance对象

gameplay主要类概述



world, actor和component

世界场景由actor对象组成, actor对象由各种component组成



控制器: APawn类和APlayerController类



APawn类

派生自AActor, 实现了对actor对象的控制

接收来自输入设备的信息, 使actor对象做出相应动作

无视觉表示, 逻辑类

pawn就是棋子的意思, 如控制游戏角色前后左右移动, 通常通过APawn类完成

生存期与actor对象一致

在actor的基础上, 支持交互


APlayerController类

派生自AController, AController派生自AActor

生存期与关卡一致

如果游戏玩家可以控制多个actor对象, 则会通过APlayerController切换当前操作的actor对象, 或者不操作任何一个actor对象

采用组合(composite)模式, APawn作为APlayerController的组件

接收来自输入设备的信息, 通常使用APlayerController处理全局控制, 如关闭菜单, 关闭声音, 退出游戏等


关卡规则: AGameModeBase类

游戏规则, 针对关卡而言

支持各种设置, 且都有默认值: 包括游戏时长设置, 玩家和NPC个数, 团队分布, 玩家的重生机制等

在关卡编辑器的世界设置中, 可对game mode进行配置

  • 使用默认值时, 显示为None



游戏角色: ACharacter类

派生自APawn, 实现了游戏角色相应功能:

  1. 增加了碰撞检测功能

    胶囊组件capsule component, 负责与外界的物理交互
  2. 增加了骨骼网格体组件skeletal mesh, 可以设置模型和动画
  3. 增加了角色移动组件character movement, 控制角色的移动, 如速度, 跳跃高度等


在pawn的基础上, 支持骨骼网格体, 运动和碰撞


AI: AIController类

派生自AController

APawn既可以由玩家控制, 也可以由AI控制: 采用组合(composite)模式, APawn作为AIController的组件

在行为树中给出任务



HUD类

head up display

负责用户界面, 目前使用较少

虚幻引擎通过widget提供用户接口, 可以用HUD来管理widget


观察者: ASpectatorPawn类

观察者类

角色死亡时, 玩家所控制的pawn

通常情况下, 为flying camera, 可以设置其为黑白效果


玩家信息: APlayerState类

负责存储玩家的各种统计信息, 如击杀人数, 死亡次数

生存期与关卡一致


游戏信息: AGameState类

多人游戏逻辑使用

多人游戏中, game mode base存在于服务器端, 保存各种信息, 将游戏过程中的玩家信息传输给客户端


游戏: UGameInstance类

游戏实例类

会创建该类型的全局变量

一些全局信息, 如和关卡无关的图形设置, 声音设置, 及其他直接加载到关卡的信息, 需要作为全局信息保存

可以创建game instance的派生类, 包含保存以上信息的变量

在项目设置中, 配置使用game instance的派生类



总结


  1. 有三种生存期, actor对象的生存期, 关卡生存期, 和游戏实例生存期
  2. 游戏包含多个关卡, 关卡类型为AGameModeBase, AGameModeBase对象负责创建所有关卡基本对象
    • APawn
    • APlayerController
    • ASpectatorPawn
    • APlayerState
    • AGameState
    • AHUD
  3. 打开关卡时, game mode base对象被创建, 其创建关卡基本对象
  4. 整个游戏中, 在所有关卡之上, 有UGameInstance对象