虚幻引擎所提供的GamePlay框架可谓是虚幻引擎最为重要的一部分内容也不为过。
虚幻引擎的设计希望开发人员在使用引擎之前是准备好了的!并且有充足的能力去理解游戏设计意图。在此之上为我们提供了一套开发规则,我们称之为游戏框架(GamePlay框架)。虚幻设计者为我们抽象出了多种角色,在开发过程中我们需要沿着设计者给定的身份进行游戏设定编写。这虽然约束了我们的设计,但是在一定程度上加强了开发的稳定性。
游戏模式(GameMode),游戏状态(GameState),玩家(DefaulePawn),玩家状态(PlayerState),玩家操控器(PlayerConroller),用户界面(HUD),以及其他556项蓝图类。
游戏模式(GameMode)
GameMode和GameState主要负责游戏中的相关信息。GM主要负责管理游戏的规则。 这些规则包括:
- 出现的玩家和观众数量,以及允许的玩家和观众最大数量。
- 玩家进入游戏的方式,可包含选择生成地点和其他生成/重生成行为的规则。
- 游戏是否可以暂停,以及如何处理游戏暂停。
- 关卡之间的过渡,包括游戏是否以动画模式开场。
GM的主要任务就是构建和实现游戏的规则,并将游戏中的其他角色进行注册:例如默认的玩家,HUD类,玩家控制器,观众类,GameState类,PlayerState类
游戏规则及获胜条件这样的内容。它仅存在于服务器上。它一般在游戏过程中不会有太多数据改变,并且它一定不应该具有客户端需要的临时数据。
【未完,会在虚幻网络服务中增加】
【注意!】 继承GameModeBase时,GameState也要继承GameStateBase!同理GameMode和GameState。
游戏状态(GameState)
可以理解为GameMode的小秘书,为世界管理者记录数据并传递给其他角色。
GameState主要负责游戏中共享信息的记录,游戏的信息可以通过GameState进行存储和同步。包括:
- 游戏已运行的时间(包括本地玩家加入前的运行时间)。
- 每个个体玩家加入游戏的时间和玩家的当前状态。
- 当前 Game Mode 的基类。
- 游戏是否已开始
GameState是虚幻中为我们进行游戏信息记录的载体。包括像关联玩家的列表、分数、象棋游戏中的象棋位置或者在开放世界游戏中已经完成的任务列表。GameState存在于服务器和所有客户端上,可以自由地进行复制来保持同步。
【注意!】 继承GameModeBase时,GameState也要继承GameStateBase!同理GameMode和GameState。
玩家(DefaulePawn)and 角色(character)
默认玩家,不管任何游戏,都应当存在一个默认的玩家,这是肯定的!即使是最开放的游戏,也需要存在一个上帝视角(摄像机)进行游戏的指令发布。在虚幻中默认玩家扮演的就是这个角色。
角色即是默认拥有一定双足运动功能的Pawn。
角色自带 SkeletalMeshComponent,可启用使用骨架的高级动画。可以将其他骨架网格体添加到角色派生的类,但这才是与角色相关的主骨架网格体。
注意:只有继承在Pawn的对象才能成为默认玩家。
默认玩家需要通过控制器进行控制,它们可以轻松地接受输入,并且可以执行各种各样的类似于玩家的动作。
玩家操控器(PlayerConroller)
控制器,是负责管理玩家的Actor类型对象。主要目的是将真实玩家的意愿进行收集,最后汇总转投给虚拟角色。这个过程就是游戏中的玩家交互过程。
PlayerController(玩家控制器)是Pawn和控制它的人类玩家间的接口。PlayerController本质上代表了人类玩家的意愿。
玩家状态(PlayerState)
PlayerState是游戏中的一个参与者的状态,比如人类玩家或者模拟人类玩家的机器人。作为游戏一部分存在的非人类玩家AI没有PlayerState。PlayerState中适合包含的示例数据有:**玩家姓名、分数、**像多人在线竞技场这样的比赛中的级别、或在夺旗模式游戏中玩家当前是否正占领旗帜。所有玩家的PlayerStates在所有机器上都存在(和PlayerControllers不同),并且可以自由地进行复制来保持同步。
我们需要搞清楚一个概念,玩家数据和玩家操控角色数据是两个不同的数据点。(与Pawn不同)
Pawn中着重存储的是角色的属性,比如说攻击力,防御力。(绑定在角色身上)
PlayerState中着重存储的是玩家的状态,比如说姓名,或是其他个性化的内容。(绑定在真人玩家身上)
用户界面(HUD)
HUD 是一种“平头显示信息”,或者说是二维的屏幕显示信息,在很多游戏中都很常见。想一下生命值、弹药量、枪支十字准线等。每个PlayerController一般都具有一些这样的信息。
HUD是我们用来进行简单UI绘制的入口,一般我们在游戏开发中均更换为UMG为用户界面开发主要手段。
结语
虽然这章内容很少,但是其中内容值得仔细推敲,什么功能写在什么类中,在实际的项目中是非常重要的一件事。
如何用好这套GamePlay框架还是需要通过实践多个项目去细细品味。