3 - 虚幻引擎游戏模式类

希望我能尽快入门UE5!本章将介绍虚幻引擎C++编程的相关内容,在本篇中我将学到:

  • UE中的游戏模式类;
  • 关卡和关卡蓝图;

通过新创建的空白C++模板来学习。

游戏模式类

背景

假设希望在游戏中实现暂停游戏功能。为了满足这个需求,需要将所有与暂停游戏相关的逻辑和实现都封装在一个单独的类中。该类负责处理玩家进入游戏时的整个流程,例如简单的游戏暂停、播放和重新启动等。

同样的,在多人游戏中,我们需要将所有与网络相关的游戏逻辑集中在一起。这正是游戏模式类存在的原因。

概念

游戏模式是一个驱动游戏逻辑并将游戏相关规则强加给玩家的类,该类包含关于当前游戏的信息,例如游戏变量和事件等。游戏模式可以容纳所有游戏对象的管理器,作为一个单例类,可以被游戏中存在的任何对象或抽象类访问。

与所有其它类一样,游戏模式类可以在蓝图或C++中拓展,这样做可以通过添加额外的功能和逻辑,使玩家能够实时了解游戏中发生的事情。

游戏模式类可以实现的逻辑示例如下:

  • 限制允许进入游戏的玩家数量;
  • 控制新连接玩家的生成位置和玩家控制器逻辑;
  • 记录游戏的得分;
  • 记录游戏的输赢情况;
  • 实现游戏结束和重新启动游戏场景。

存放的位置

游戏模式类不会复制到任何客户端或连接的玩家,其作用范围仅限于生成它的服务器。游戏玩法逻辑不应该存在于客户端,它应该只存在于服务器上。

游戏模式的默认类

可以为以下默认值指定相应的类:

  • 游戏会话类 Game Session:处理管理级别的游戏流程,如登录审批;
  • 游戏状态类 Game State:处理游戏的状态,以便客户端可以看到游戏内部的情况;
  • 玩家控制器类 Player Controller:用来拥有和控制Pawn的主要类;
  • 玩家状态类 Player State:保存游戏中玩家的当前状态;
  • HUD类 HUD:处理显示给玩家的用户界面;
  • 默认Pawn类 Default Pawn:玩家控制的主要角色;
  • 旁观者类 Spectator Pawn:作为默认Pawn类的子类,Spectatorpawn类指定负责观看游戏的Pawn;
  • 重新播放旁观者玩家控制器类 Replay Spectator Player Controller:在游戏回放过程中负责操纵回放的玩家控制器。
  • 服务器统计数据复制器类 Server Stat Replicator Class:负责复制服务器统计网络数据。

可以为上述游戏模式类指定自定义的类,也能用默认的。

游戏事件

游戏模式提供了一系列事件,可以重写这些事件来处理特定的玩法逻辑。例如以下事件对网络功能特别有用:

  • On Post Login:此事件在玩家成功登录游戏后被调用。
  • Handle Starting New Player:在onPostLogin事件后被调用,可以用来定义新进入的玩家会发生什么。默认情况下,会为新玩家创建一个Pawn。
  • Spawn Default Pawn At Transform:出发游戏中实际的Pawn生成,可以指定玩家出生点。
  • On Logout:玩家离开游戏或被销毁时调用此事件。
  • On Restart Player:调用该事件让玩家重生。

游戏模式基类

从4.14版本开始,虚幻引入了 游戏模式基类 GameModeBase,作为所有游戏模式类的父类。它本质上是游戏模式类的简化版本。

默认情况下,游戏模式积累包含着新的基于模板的项目中。游戏模式还包含一个状态机,用于处理和记录玩家的状态。

关卡和关卡蓝图

关卡与游戏模式

关卡是游戏的组成部分。由于许多游戏规模庞大,它们被分解为不同的关卡。一个关卡被加载到游戏中供玩家玩,当玩家完成该关卡时,另一个关卡可能会被加载进来(同时卸载当前关卡),这样玩家就可以继续游戏。

游戏模式可以直接应用于关卡。在加载关卡时,将使用指定的游戏模式类来处理特定关卡的所有逻辑和游戏玩法,并覆盖该关卡的项目游戏模式,可以在打开关卡后使用 “世界场景设置” 面板应用此设置。一个关卡只能有一个游戏模式类,一个单一的游戏模式类可以分配到多个关卡。

关卡蓝图

关卡蓝图是在关卡内运行的蓝图,不能在关卡范围外访问。游戏模式可以在任何蓝图中通过Get Game Mode节点访问。

参考资料

  • 《UE5游戏开发完全学习教程-C++篇》