|
即使是最没有限制的游戏也以规则为基础,而这些规则构成一个游戏类型。在最基本的层面上,这些规则包括:
在场的玩家和观众数量,以及所允许的玩家和观众最大数量。玩家如何进入游戏,可能包括生成地点和生成/重生行为。是否可以暂停游戏,以及如何暂停游戏。等级间的过渡,包括游戏是否应以电影模式开始。
虽然所有游戏类型都有某些共同的基本规则,但取决于你在开发的游戏类型,它们有无限种变化。熟悉的游戏类型包括第一人称射击游戏,如:《死亡竞赛》、《夺旗》和《终极悍将》——选择这些游戏类型往往是比赛设置过程中的菜单选项,因此它们非常明显。其它类型,如角色扮演冒险游戏或平台游戏可能有较少的变量,以及不太明显的游戏类型,但游戏类型仍设定游戏的条件。例如,可能会向玩家施加时间限制,当玩家达到某一阶段或击败一位“首领”人物时才能过关。更复杂的情况会是《地牢探索者》类型的游戏。在主世界中会有一个总体的游戏类型,它将留意游戏的进度和条件。在每个地牢中可能会有该地牢特定的游戏类型,从而使每个地牢都完全独特,并有自己的一套规则和目标。
有两种主要的类来处理有关游戏类型的信息:GameMode 和 GameState。
GameMode
“AGameMode” 类定义所玩的游戏,并执行游戏规则。“AGameMode” 中的一些默认功能包括:
任何设定游戏规则的新函数或变量都应添加在 “AGameMode” 类的子类中。从玩家以什么库存道具开始,或有多少条命,到时间限制,以及结束游戏所需的分数都属于 GameMode。可以为游戏应包括的每个游戏类型创建 “AGameMode” 类的子类。一个游戏可以有任何数量的游戏类型,因此有任何数量的 “AGameMode” 类的子类;然而,在任何特定时间只可以使用一种游戏类型。每次通过 “UGameEngine::LoadMap()” 函数初始化一个游戏等级时都会实例化一个 GameMode Actor。该 Actor 定义的游戏类型将被用于该等级所持续的时间。
比赛状态
GameMode 包含监测比赛状态或整体游戏流程的状态机。要查询当前状态,你可以使用 GetMatchState,或诸如 HasMatchStarted、IsMatchInProgress 和 HasMatchEnded 的包装器。以下是可能的比赛状态:
EnteringMap 是初始状态。Actors 尚未开始计数,并且世界尚未完全初始化。当一切都完全加载后会过渡到下个状态。
WaitingToStart 是下个状态,进入时调用 HandleMatchIsWaitingToStart。Actors 开始计数,但尚未生成玩家。如果 ReadyToStartMatch 返回_true_,或如果有人调用 StartMatch,则过渡到下个状态。
InProgress 是下个状态,进入时调用 HandleMatchHasStarted,进而调用所有 Actors的 BeginPlay。普通游戏正在进行中。如果 ReadyToEndMatch 返回 true,或如果有人调用 EndMatch,则过渡到下个状态。
WaitingPostMatch 是下个状态,进入时调用 HandleMatchHasEnded。Actors 仍在计数,但不接受新玩家。当地图转换开始时过渡到下个状态。
LeavingMap 是最后的状态,进入时调用 HandleLeavingMap。在转至新地图时比赛停留在该状态。
Aborted 是故障状态,从 AbortMatch 开始。当存在不可恢复的错误时设置成该状态。
默认情况下,比赛状态几乎总为 InProgress。但个别游戏可以覆盖该行为,以构建有更复杂规则的多人游戏。
GameMode 派生 Blueprints
GameMode 是可制定蓝图的类。可以创建 GameMode 派生的 Blueprints,并用其作为项目或等级的默认游戏模式。
GameMode 派生 Blueprints 可以设置以下默认值:
默认Pawn类
HUD类
玩家控制器类
观众类
游戏状态类
玩家状态类
设置 GameMode
有几种方法来设置某一等级的 GameMode,以下按照从最低优先级到最高优先级的顺序:
在 “DefaultGame.ini” 文件中的 “/Script/Engine.WorldSettings/” 部分设置 “GlobalDefaultGameMode” 项将为项目中的所有地图设置默认游戏模式。
[/Script/Engine.WorldSettings]GlobalDefaultGameMode="/Script/MyGame.MyGameGameMode"GlobalDefaultServerGameMode="/Script/MyGame.MyGameGameMode"
要覆盖一个地图的项目设置,在编辑器的 World Settings 选项卡中设置 GameMode Override。
符合一定规则的地址可以被传递给可执行文件,以强制游戏加载特定选项。使用“game”选项来设置游戏模式。查看 命令行参数 更多信息。
UE4Editor.exe /Game/Maps/MyMapgame=MyGameMode -game
最后,可以在 “DefaultGame.ini” 文件的 “/Script/Engine.WorldSettings/” 部分设置地图前缀。这些前缀为有特定前缀的所有地图设置默认游戏模式。
[/Script/Engine.WorldSettings]+DefaultMapPrefixes=(Prefix="DM",GameMode="UTGame.UTDeathmatch")
关于设置 Game Mode 的例子,请参阅 设置游戏模式 文档。
|
|