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++篇》