(官网)虚幻3--游戏类型技术指南
游戏类型技术指南
概述
每个使用虚幻引擎制作的游戏都会涉及到一个或多个游戏类型的使用问题。这个概念在诸如虚幻竞技场这样的用户实际可以选择要玩的游戏类型的游戏中显而易见,它可以是 Deathmatch、Capture the Flag、Last Man Standing 或者一些其他游戏类型。但是,诸如平台、运动竞技游戏、RTS 游戏以及 RPG 游戏等等都取决于游戏类型,虽然它对于用户来说是透明的。
游戏类型可以决定游戏的规则。游戏如何开始,如何进行积分或处理事件,完成这个游戏必须满足的条件以及任何其他游戏元素。同时游戏以及游戏类型根据不同的关卡也会有所区别;加载一个新的关卡后(至少从传统意义上说, 关卡动态载入可以将关卡加载到当前的关卡中,保留当前的游戏类型。),就会加载一个新的游戏类型。在 Deathmatch 游戏中,游戏类型可以控制将玩家和机器人生成到游戏的各个位置,控制每个玩家的杀死人的数量并保存积分,然后在时间耗尽或其中一个玩家完成要求的杀死人的数量时结束游戏。这些内容都非常简单易懂,而且同样的概念适用于任何其他游戏,尽管它们可能稍微有点复杂。
例如,假设是一个冒险角色扮演游戏。玩家开始游戏后,游戏类型可以将玩家生成到世界中,在指定的位置,例如地下城的出口,或者在最后保存游戏的时候玩家所处位置。玩家可以探索世界,然后来到地下城。当玩家进入地下城后,就会加载一个新的关卡和游戏类型。这个游戏类型可以在地下城开始的时候生成玩家,然后等待玩家完成地下城的目标,这个目标可能是消灭大怪或收集一些特定的物品或者让您做的任务。当游戏类型检测到地下城已经完成时,它会将玩家送回到主要世界,加载主要世界关卡。在主要世界中,游戏类型会将玩家生成在地下城入口,然后等待玩家在持续探索的过程中完成游戏的所有目标。
很明显,这种情况要复杂的多,因为游戏中会同时运行多个游戏类型,但是每个游戏类型的概念与 Deathmatch 游戏的简单实例的概念相同。
GameInfo 类
GameInfo
类是虚幻中所有游戏类型的基类。每次加载地图的时候,创建一个相应的 GameInfo
类的新实例,并将其赋值为游戏类型。要了解有关如何为特定关卡设置游戏类型的信息,请参阅游戏生命周期部分。
GameInfo 属性
仲裁
- bUsingArbitration - 如果为 TRUE,游戏将会使用仲裁。
- bHasArbitratedHandshakeBegun - 在发生仲裁握手的情况下为 TRUE。只要握手开始就会拒绝新的连接。
- bNeedsEndGameHandshake - 如果为 TRUE,游戏应该在游戏结束的时候进行握手。
- bHasEndGameHandshakeBegun - 在最后游戏握手已经开始的情况下为 TRUE。
- bIsEndGameHandshakeComplete - 在最后游戏握手结束的情况下为 TRUE。
- ArbitrationHandshakeTimeout - 全局配置。客户端在被踢掉之前必须执行仲裁握手的时间长度。
- PendingArbitrationPCs - 一个
PlayerControllers
数组,游戏等待与其进行握手。 - ArbitrationPCs - 一个
PlayerControllers
数组,游戏已经与之进行握手,而且需要写入到在线子系统的仲裁数据的最终结果。
秘技检测
- [Min/Max]TimeMargin - 在触发加速模式检测之前允许客户端时钟落后/超出服务器时钟的时间最大值。
- TimeMarginSlack - 在没有触发加速模式检测的情况下允许客户端时钟偏离服务器时钟的速度。
- bIsStandbyCheckingEnabled - 如果该属性为 TRUE,游戏要对备用秘技进行检测。
- bIsStandbyCheckingOn - 在检测备用秘技的时候,该属性为 TRUE。
- bHasStandbyCheatTriggered - 在检测到备用秘技的时候,该属性为 TRUE。
- Standby[Rx/Tx]CheatTime - 在触发这个秘技代码之前可以不接收到软件包/确认的时间。
- BadPingThreshold - 在断定服务器将会延迟软件包或上游连接不良之前允许的最高 ping 值。
- PercentMissingFor[Rx/Tx]Standby - 在触发备用代码之前允许客户端丢失软件包/确认数据的百分率。
- PercentForBadPing - 在触发备用代码之前允许客户端具有的差 ping 值的百分率。
- JoinInProgressStandbyWaitTime - 在检查备用问题的连接之前要等待的时间。
游戏组件
- PlayerControllerClass - 在新玩家登录到这个游戏类型时要使用的
PlayerController
类。 - DefaultPawnClass - 在新玩家登录到这个游戏类型时要使用的
Pawn
类。 - HUDType - 用于这个游戏类型的抬头显示的
HUD
类。 - PlayerReplicationInfoClass - 在新玩家登录到这个游戏类型时要使用的
PlayerReplicationInfo
类。 - GameReplicationInfoClass - 用于该游戏类型的
GameReplicationInfo
类。 - OnlineSub - 供该游戏类型与平台层的服务进行通信使用的
OnlinSubsystem
实例。 - GameInterface - 供该游戏类型创建、搜索或销毁在线游戏时使用的
OnlineGameInterface
实例。 - OnlineStatsWriteClass - 发送给客户端用于创建并保存它们的统计数据的
OnlineStatsWrite
类。 - OnlineGameSettingsClass - 在通过在线服务注册专用服务器时使用的
OnlineGameSettings
类。 - DeathMessageClass - 用于在玩家死亡时显示消息的
LocalMessage
类。 - GameMessageClass - 用于显示有关游戏可玩性事件的消息的
GameMessage
类。 - AccessControlClass - 适用于该游戏类型的
AccessControl
类。 - AccessControl - 可以控制玩家是否可以进入游戏和/或成为管理员的
AccessControl
实例。 - BroadcastHandlerClass - 适用于该游戏类型的
BroadcastHandler
类。 - BroadcastHandler - 用于为该游戏类型显示消息的
BroadcastHandler
实例。 - AutoTestManagerClass - 适用于该游戏类型的
AutoTestManager
类。 - MyAutoTestManager - 用于管理自动测试的
AutoTestManager
实例。只有在通过命令行申请的情况下存在。
游戏设置
- bRestartLevel - 如果该属性为 TRUE,那么应该在玩家死亡后重新启动这个关卡。
- bTeamGame - 如果该属性为 TRUE,那么指定该游戏为团队游戏,也就是说将该玩家划分为多个团队。这里没有提供在基类
GameInfo
中创建团队的内置逻辑规则。只需指出该游戏含有团队。 - bGameEnded - 在满足结束游戏条件的时候,该属性为 TRUE。由
EndGame()
进行设置。 - bOverTime - 如果该属性为 TRUE,那么该游戏需要加时。这会在调用
EndGame()
后发生,但是由于没有满足某些条件CheckEndGame()
会返回 false。 - bDelayedStart - 如果该属性为 TRUE,游戏将不会在玩家加入后立即开始。
- bWaitingToStartMatch - 当游戏处于
PendingMatch
状态的时候,该属性为 TRUE,等待游戏开始。 - bChangeLevels - 全局配置。如果该属性为 TRUE,应该会在重新开始这个游戏的时候加载新地图。
- bAlreadyChanged - 在重新开始游戏且
bChangeLevels=TRUE
的时候,只要新地图开始加载过程之后,这个属性就为 TRUE。 - bGameRestarted - 在已经重新开始游戏后,这个属性为 TRUE。
- bLevelChange - 在进行关卡转换(通过
ProcessServerTravel()
)的过程中为 TRUE。 - GameDifficulty - 全局配置。游戏的难度系数修改器。这个修改器必须在子类中使用,因为针对每个具体的游戏它的使用方法千差万别。
- GoreLevel - 全局配置。要显示的血腥的程度。值为
0
代表显示正常的血块量,值增加则代表显示更少血块。 - GameSpeed - 游戏时间的调整比例系数。用于确定
WorldInfo.TimeDilation
。 - MaxSpectators - 全局配置。服务器上的游戏类型可以接受的最大玩家数量。
- MaxSpectatorsAllowed - 这个游戏类型可以允许的最大观众数量。用于将
MaxSpectators
设置为一个敏感值,因为它是在配置文件中设置的,可以进行修改。 - NumSpectators - 游戏中当前的观众数量。
- MaxPlayers - 全局配置。服务器上的游戏类型可以接受的最大玩家数量。
- MaxPlayersAllowed - 这个游戏类型可以允许的最大玩家数量。用于将
MaxSpectators
设置为一个敏感值,因为它是在配置文件中设置的,可以进行修改。 - NumPlayers - 游戏中当前的人类控制玩家的数量。
- NumBots - 游戏中当前的 AI 控制玩家的数量。
- NumTravellingPlayers - 当前仍然在上一个地图中行动的玩家数量。
- CurrentID - 用于在创建
PlayerReplicationInfo
的时候将唯一的PlayerIDs
分配给每个PlayerReplicationInfo
的当前 ID。 - DefaultPlayerName - 局部配置。在为该游戏类型的玩家分配名称的时候使用的默认名称前缀。
- GameName - 局部配置。游戏类型的显示名称。
- FearCostFalloff - 这个系数可以确定在
bDoFearCostFalloff=true
的时候NavigationPoints
的FearCost
随时间下降的速度。 - bDoFearCostFalloff - 如果该属性为 TRUE,那么
NavigationPoints
的FearCost
将会随时间下降。 - GoalScore - 玩家结束比赛需要达到的“分数”。分数是一个仲裁概念,不过很多游戏会追踪某种类型的分数,然后在达到某一特定分数的时候结束游戏。
- MaxLives - 玩家在每次比赛中可以使用的最大命数量。
- TimeLimit - 单人比赛可以进行的时间长度。
- GameInfoClassAliases - 一个
GameClassShortName
结构的数组,可以将游戏类型的缩写名称映射到完整的类名称。 - DefaultGameType - 配置。在没有使用其他方式指定游戏类型的情况下使用的默认游戏类型(以字符串形式指定游戏类型类的完整路径)。
- DefaultMapPrefixes - 配置。一个
GameTypePrefix
结构的数组,它可以将关卡名称中的前缀映射到特定的游戏类型。用于确定在没有指定游戏类型的情况下使用的游戏类型。重新载入DefaultGameType
。请参阅游戏类型前缀部分了解更多详细信息。 - CustomMapPrefixes - 配置。一个
GameTypePrefix
结构的数组,它可以将关卡名称中的前缀映射到特定的游戏类型。用于确定在没有指定游戏类型的情况下使用的游戏类型。重新载入DefaultGameType
。请参阅游戏类型前缀部分了解更多详细信息。 - bRequiresPushToTalk - 如果该属性为 TRUE,那么需要为该游戏类型设置一键通话的语音通讯。否则,可以将语音通信一直打开。
设置器
- BaseMutator - 引用第一个用于该游戏类型的
Mutator
。
网络/复制
- InactivePRIArray - 一个
PlayerReplicationInfos
的数组,其中的玩家已经离开游戏。保存这些玩家数据以防他们重新连接。 - bKickLiveIdlers - 全局配置。如果该属性为 TRUE,那么可以将含有
Pawns
的PlayerControllers
从游戏中踢出使其处于空闲状态。 - MaxIdleTime - 玩家在被踢出之前可以接受处于空闲状态的最长时间。
- LeaderboarId - 写入技术/积分统计数据的排行榜 id。
- ArbitratedLeaderBoardId - 写入技术/积分统计数据的仲裁排行榜 id。
- bUseSeamlessTravel - 如果该属性为 TRUE,那么将会使用在背景中加载同时不会断开与客户端连接的
SeamlessTravel()
进行地图转换。 - CoverReplicatorBase - 在专用服务器开始注册时使用的 URL 选项字符串。
- bHasNetworkError - 当发生可以阻止服务器进行地图转换的重要网络错误时,该属性为 TRUE。
- ServerOptions - 在专用服务器开始注册时使用的 URL 选项字符串。
- AdjustNetSpeed - 用于动态控制监听服务器网速的当前经过调整的网速。
- LastNetSpeedUpdateTime - 通过客户端进入或离开最后一次更新服务器的网速。
- TotalNetBandwidth - 全局配置。可供监听服务器使用的带宽总数,它会通过网络连接进行动态分割。
- [Min/Max]DynamicBandwidth - 根据连接进行动态设置的带宽最小值和最大值。
暂停
- bPauseable - 如果该属性为 TRUE,那么在线游戏的时候玩家可以暂停游戏。在单机游戏中,玩家通常可以暂停游戏。
- bAdminCanPause - 如果该属性为 TRUE,那么在线游戏的时候管理员可以暂停游戏。
- Pausers - 一个代理数组,可以在
ClearPause()
检查确定游戏是否可以取消暂停。
分析/测试
- bFixedPlayerStart - 如果该属性为 TRUE,那么游戏应该使用相同的重生点使分析数据保持一致。在
GameInfo
中没有提供这方面功能。必须将其加入到这个逻辑规则中,才能在子类中选择重生点。 - CauseEventCommand - 在地图 URL 中将控制台事件传递给游戏。通常用于测试,例如,触发自动的关卡浏览模式。在
GameInfo
中没有可以执行这个命令的功能。必须将其添加到子类中。 - BugLocString - 在地图 URL 中将 BugIt 位置字符串传递给游戏。
- BugRotString - 在地图 URL 中将 BugIt 旋转字符串传递给游戏。
GameInfo 函数
游戏
- OnEngineHasLoaded - 在启动的时候已经加载引擎的情况下通过 native 代码调用的事件。它只会在第一次启动游戏时才会被调用,而且不是每次都会加载新地图(游戏类型同样如此)。
- GetSupportedGameTypes [InFilename] [OutGameType] [bCheckExt] - 可以为给定的地图名称检索
GameTypePrefix
结构。请参阅游戏类型前缀部分了解更多详细信息。- InFilename - 要检索游戏类型的地图的名称。
- OutGameType - 输出。输出与给定地图相关的
GameTypePrefix
结构体。 - bCheckExt - 可选。如果该属性为 TRUE,那么要检查地图的文件扩展名,以确保它是一个有效的地图文件。
- GetMapCommonPackageName [InFilename] [OutCommonPackageName] - 为给定的地图文件名称检索通用软件包(如果存在)的名称。如果检索成功,返回 TRUE。在没有找到地图的
GameTypePrefix
或者GameTypePrefix
没有使用通用软件包的情况下,返回 FALSE。请参阅通用软件包部分了解更多详细信息。- InFilename - 检索通用软件包名称的地图的名称。
- OutCommonPackageName - 输出。输出通用软件包的名称。
- GetDefaultGameClassPath [MapName] [Options] [Portal] - 可以返回到用于特定地图和选项的最佳
GameInfo
类的完整路径。可以使用它预加载经过烘焙的软件包等等,因此,不需要包含任何备用类,因为稍后会调用SetGameType()
,实际查找/加载想要得到的类。- MapName - 要使用默认游戏类型的地图名称。
- Options - 在 URL 中地图的选项字符串(如果存在)。
- Portal - 玩家被发送到的目标门户网站的名称(如果存在)。
- SetGameType [MapName] [Options] [Portal] - 可以返回 GameInfo 类,为游戏在指定地图和指定选项上生成这个类。该函数应该包含一些备用类,以防找不到需要的类。
- MapName - 要使用这个游戏类型的地图名称。
- Options - 在 URL 中地图的选项字符串(如果存在)。
- Portal - 玩家被发送到的目标门户网站的名称(如果存在)。
- InitGame [Options] [ErrorMessage] - 在任何其他脚本执行之前进行调用,以此初始化参数并为游戏类型生成辅助类。
- Options - 在 URL 中地图的选项字符串(如果存在)。
- ErrorMessage - 输出。输出任何在初始化游戏类型的过程中出现的错误消息。
- StartMatch - 通知所有 actor 比赛开始,同时为玩家生成
Pawns
。 - Reset - 将游戏类型重新设置为它的初始状态。在设置完成所有其他
Actors
之后调用它。 - ShouldReset [ActorToReset] - 确定给定的
Actor
是否允许进行重新设置。给定的Actor
要在重启游戏的时候调用Reset()
才会返回 TRUE,而在GameInfo
将手动重新设置或在 actor 不需要进行重新设置的情况下返回 FALSE。- ActorToReset - 要重新设置的
Actor
。
- ActorToReset - 要重新设置的
- ResetLevel - 通过在所有
Controllers=、然后所有 =Actors
,最后GameInfo
上调用Reset()
重新设置关卡。 - RestartGame - 通过在
bChangeLevels=TRUE
的情况下更改地图或通过重新加载当前的地图重新启动游戏。 - EndGame [Winner] [Reason] - 执行结束游戏处理。应该在满足结束游戏条件的时候进行调用。
- Winner - 赢得游戏的玩家的
PlayerReplicationInfo
。 - Reason - 说明游戏结束的原因的
String
。例如,"TimeLimit"、"LastMan" 和 "DungeonComplete" 等等。
- Winner - 赢得游戏的玩家的
- CheckEndGame [Winner] [Reason] - 通过
EndGame()
调用,检查根据提供的原因游戏是否确实应该结束。 子类可以重新载入它,以便放置其他游戏特定修改。- Winner - 赢得游戏的玩家的
PlayerReplicationInfo
。 - Reason - 说明游戏结束的原因的
String
。例如,"TimeLimit"、"LastMan" 和 "DungeonComplete" 等等。
- Winner - 赢得游戏的玩家的
- CheckModifiedEndGame [Winner] [Reason] - 通过
CheckEndGame()
调用,可以修改游戏结束条件。默认情况下,它可以在所有的Mutators
上调用CheckEndGame()
。- Winner - 赢得游戏的玩家的
PlayerReplicationInfo
。 - Reason - 说明游戏结束的原因的
String
。例如,"TimeLimit"、"LastMan" 和 "DungeonComplete" 等等。
- Winner - 赢得游戏的玩家的
- PerformEndGameHandling - 为在线层执行结束游戏处理过程。
- GameEnding - 引擎调用以修改正在关闭的游戏的游戏类型,指的是那些正在退出的应用或者正在加载的新地图。
- PreExit - 引擎调用以通知游戏引擎正在关闭。
- MatchIsInProgress - 返回比赛现在是否正在进行中。
- GameEventsPoll - 作为可以定期记录自定义游戏的统计数据代码的入口点使用的函数存根。它可以供
GameplayeStatsWriter
的Poll()
计时器开始记录统计数据后定期进行调用。子类应该重新加载它,添加自定义统计数据日志。 - EndLogging [Reason] - 停止记录统计数据的函数存根。子类应该重新载入它,添加逻辑规则停止统计数据日志。
- Reason - 说明不进行记录的原因的
String
。
- Reason - 说明不进行记录的原因的
转换
- ProcessServerTravel [URL] [bAbsolute] - 控制服务器跳转到新关卡。
- URL - 要转换到的地图的
URL
。 - bAbsolute - 如果该属性为 TRUE,那么应该使用绝对转换。否则,使用相对转换。
- URL - 要转换到的地图的
- ProcessClientTravel [URL] [NextMapGuid] [bSeamless] [bAbsolute] - 通知所有客户端转换到指定的 URL。
- URL - 要转换到的地图的
URL
。 - NextMapGuid - 下一个地图的服务器版本的 GUID。
- bSeamless - 如果该属性为 TRUE,那么应该使用无缝转换。
- bAbsolute - 如果该属性为 TRUE,那么应该使用绝对转换。否则,使用相对转换。
- URL - 要转换到的地图的
- SendPlayer [aPlayer] [URL] - 将玩家发送到指定的 URL。
- aPlayer - 要发送到新的
URL
的玩家的PlayerController
。 - URL - 要转换到的地图的
URL
。
- aPlayer - 要发送到新的
- GetNextMap - 为下一个游戏返回玩家应该转换到的地图的函数存根。如果游戏有一个地图循环,那么子类应该重新加载这个函数存根。
- GetTravelType - 确定应该使用的转换类型。绝对转换返回 TRUE,相对转换则返回 false。
- PreCommitMapChange [PreviousMapName] [NextMapName] - 引擎在卸载上一个关卡之前通过
CommitMapChange()
调用的事件存根。- PreviousMapName - 要卸载的地图名称。
- NextMapName - 要加载的地图名称。
- PostCommitMapChange - 引擎在卸载上一个关卡并加载新关卡之后通过
CommitMapChange()
调用的事件存根。 - GetSeamlessTravelActorList [bToEntry] [ActorList] - 引擎在服务器上进行无缝关卡转换过程中调用,可以得到应该移至新的关卡中的 Actor 的列表。=PlayerControllers=、
Role < ROLE_Authority
Actors
以及任何不在这个列表中的Actor
内部的非 Actor,例如,在列表中的Object.Outer =
Actor= 都会自动移动,不管它们是否包含在这里。只有 PersistentLevel 中的动态 (bStatic and bNoDelete) actor 可以移动(这其中包含游戏过程中生成的所有 actor)。转换的两个部分都可以调用它,因为 actor 可能会在中间发生改变(例如,玩家可能会加入或离开游戏)- bToEntry - 如果该属性为 TRUE,那么服务器会从 以前的关卡 -> 入口 进行转换。否则,服务会从 入口 -> 新关卡 进行转换。
- ActorList - 输出。输出要移动的
Actors
数组。
- PostSeamlessTravel - 完成无缝转换之后,引擎在 新
GameInfo
类上进行调用。通常可以使用它重新初始化已经在游戏中的玩家,因为它们将不会调用Login()
。 - HandleSeamlessTravelPlayer [C] - 处理重新初始化那些通过无缝关卡转换后仍然保留下来的玩家。通过
PostSeamlessTravel()
从继服务器之后完成加载的玩家使用的引擎中进行调用。- C - 要处理的玩家的
Controller
。
- C - 要处理的玩家的
- SetSeamlessTravelViewTarget [PC] - 为通过无缝关卡转换保留下来的玩家设置
ViewTarget
。- PC - 要设置
ViewTarget
的PlayerController
。
- PC - 要设置
玩家
- PreLogin [Options] [Address] [ErrorMessage] - 接受或拒绝玩家加入服务器。
- Options - 在 URL 中地图的选项字符串(如果存在)。
- Address - 连接玩家的 IP 地址。
- ErrorMessage - 输出。输出无法登录的错误消息。非空
String
在这里意味着登录失败。
- Login [Portal] [Options] [UniqueID] [ErrorMessage] - 玩家登录并为玩家生成
PlayerController
。返回生成的PlayerController
。- Portal - 玩家被发送到的目标门户网站的名称(如果存在)。
- Options - 在 URL 中地图的选项字符串(如果存在)。
- UniqueID - 玩家登录时的
UniqueNetID
。 - ErrorMessage - 输出。输出无法登录的错误消息。非空
String
在这里意味着登录失败。
- PostLogin [NewPlayer] - 引擎在玩家成功登录控制玩家设置之后进行调用。
- NewPlayer - 已经登录的玩家的
PlayerController
。
- NewPlayer - 已经登录的玩家的
- Logout [Exiting] - 通过
Controller
进行调用,在销毁游戏的时候将玩家从游戏中移除。- Exiting - 离开游戏的玩家的
Controller
。
- Exiting - 离开游戏的玩家的
- SpawnDefaultPawnFor [NewPlayer] [StartSpot] - 使用
DefaultPawnClass
为给定的Controller
生成并返回Pawn
。- NewPlayer - 要生成
Pawn
的玩家的Controller
。 - StartSpot - 要生成
pawn
的NavigationPoint
。
- NewPlayer - 要生成
- GetDefaultPlayerClass [C] - 返回适用于给定
Controller
的默认Pawn
类。- C - 要获取
Pawn
类的Controller
。
- C - 要获取
- StartHumans - 通过调用
RestartPlayer()
启动人类控制玩家。 - StartBots - 通过调用
RestartPlayer()
启动 AI 控制玩家。 - RestartPlayer [NewPlayer] - 通过为玩家找到一个开始的地点、生成一个
Pawn
以及添加默认武器库等重新启动一个玩家(人类或 AI)。- NewPlayer - 要重新启动的玩家的
Controller
。
- NewPlayer - 要重新启动的玩家的
- GenericPlayerInitialization [C] - 处理在转换方法
PostLogin()
和HandleSeamlessTravelPlayer()
之间共享的所有玩家初始化。- C - 要进行初始化的玩家的
Controller
。
- C - 要进行初始化的玩家的
- UnregisterPlayer [PC] - 在玩家离开游戏时,从命名会话中移除的玩家。
- PC - 离开游戏的玩家的
PlayerController
。
- PC - 离开游戏的玩家的
- AtCapacity [bSpectator] - 返回游戏是否已经完整。
- bSpectator - 如果该属性为 TRUE,返回游戏中观众是否为最大容量。否则,返回游戏中玩家是否为最大容量。
- GetNumPlayers - 返回游戏中玩家的数量。
- GetNextplayerID - 返回要用于加入玩家的下一个 ID。
- SetPlayerDefaults [PlayerPawn] - 将某些玩家
Pawn
属性重新设置为它们的默认值。通过RestartPlayer()
调用。- PlayerPawn - 重新设置属性的
Pawn
。
- PlayerPawn - 重新设置属性的
- CanSpectate [Viewer] [ViewTarget] - 返回是否允许给定的
PlayerController
从提供的PlayerReplicationinfo
视角观看。- Viewer - 观众的
PlayerController
。 - ViewTarget - 要观看的
PlayerReplicationInfo
。
- Viewer - 观众的
- ChangeName [Other] [S] [bNameChange] - 将给定的玩家名称更改为指定名称。
- Other - 玩家的
Controller
。 - S - 要赋给玩家的名称。
- bNameChange - 未使用。
- Other - 玩家的
- ChangeTeam [Other] [N] [bNewTeam] - 将给定的玩家团队更改为指定团队。
- Other - 玩家的
Controller
。 - N - 要放置玩家的团队编号。
- bNewteam - 未使用。
- Other - 玩家的
- PickTeam [Current] [C] - 返回要安排给定玩家的实际团队数量。
- Current - 要放置玩家的临时团队编号。
- C - 玩家的
Controller
。
- PlayerCanRestartGame [aPlayer] - 返回是否允许给定玩家重新开始游戏。
- aPlayer - 申请重新开始游戏的玩家的
PlayerController
。
- aPlayer - 申请重新开始游戏的玩家的
- PlayerCanRestart [aPlayer] - 返回是否允许给定玩家重新开始游戏。
- aPlayer - 要求重新开始游戏的玩家的
PlayerController
。
- aPlayer - 要求重新开始游戏的玩家的
- SwapPlayerControllers [OldPC] [NewPC] - 在无缝转换的时候交换视窗/连接的
PlayerControllers
,与此同时新游戏类型的Controller
类与之前的有所不同。- OldPC - 在上一个游戏类型中的玩家的
PlayerController
。 - NewPC - 在新游戏类型中的玩家的
PlayerController
。
- OldPC - 在上一个游戏类型中的玩家的
导航
- DoNavFearCostFalloff - 在
bDoFearCostFalloff=true
的情况下更新导航点 fear cost fall off。通过GameInfo
的Timer()
调用。 - NotifyNavigationChanged [N] - 通知游戏类型在 NavigationPoint 变为阻止或取消阻止的时候允许它通知世界中的 AI,这样它们可以更新它们的路线。
- N - 已经被更改的
NavigationPoint
。
- N - 已经被更改的
- ShouldSpawnAtStartSpot [Player] - 返回是否应该将给定玩家的
StartSpot
属性作为它的Pawn
的生成位置。- Player - 玩家的
Controller
。
- Player - 玩家的
- FindPlayerStart [Player] [InTeam] [IncomingName] - 返回最适合该玩家开始的位置
NavigationPoint
。=PlayerStarts= 由RatePlayerStart()
决定。- Player - 玩家的
Controller
。 - InTeam - 可选项。玩家所在的团队编号。
- IncomingName - 可选项。指出作为开始位置的传送标签。
- Player - 玩家的
- ChoosePlayerStart [Player] [InTeam] - 返回最适合给定玩家开始的
PlayerStart
。=PlayerStarts= 由RatePlayerStart()
决定。- Player - 玩家的
Controller
。 - InTeam - 可选项。玩家所在的团队编号。
- Player - 玩家的
- RatePlayerStart [P] [Team] [Player] - 返回给定
PlayerStart
对指定玩家和团队的需要程度。- P - 要获取等级的
PlayerStart
。 - Team - 玩家所在的团队编号。
- Player - 玩家的
Controller
。
- P - 要获取等级的
武器
- ShouldRespawn [Other] - 返回给定
PickupFactory
是否应该重新生成。默认情况下,只允许在多人游戏中重新生成物品。- Other - 要重新生成的物品的
PickupFactory
。
- Other - 要重新生成的物品的
- AddDefaultInventory [P] - 为给定
Pawn
生成任何默认武器(通过Pawn::AddDefaultInventory()
)。通过RestartPlayer()
调用,还可以通过任何生成Pawn
的ActorFactory
调用。- P - 要赋予默认武器的
Pawn
。
- P - 要赋予默认武器的
- PickupQuery [Other] [ItemClass] [Pickup] - 返回是否允许给定玩家选取指定团队。在
Pawn
尝试选取这个物品时,通过PickupFactory
或DroppedPickup
进行调用。- Other - 尝试要选取这个物品的
Pawn
。 - ItemClass - 物品的
Inventory
类。 - Pickup - 包含物品的
Actor
,例如, =PickupFactory=。
- Other - 尝试要选取这个物品的
- DiscardInventory [Other] [Killer] - 在玩家武器销毁之后将其删除或丢弃。
- Other - 死亡的玩家的
Controller
。 - Killer - 可选项。将其他玩家杀死的玩家的
Controller
(如果存在)。
- Other - 死亡的玩家的
消息
- BroadcastDeathMessage [Killer] [Other] [damageType] - 在一个玩家 (
Killer
) 杀害另一个玩家 (Other
) 时在DeathMessageClass
中显示的消息。调用BroadcastLocalized()
。- Killer - 杀死其他玩家的玩家的
Controller
。它可以是None
(没有被玩家杀死)或者与Other
(自杀)相同。 - Other - 被杀死的玩家的
Controller
。 - damageType - 导致玩家死亡的伤害的
DamageType
。
- Killer - 杀死其他玩家的玩家的
- Broadcast [Sender] [Msg] [Type] - 向游戏中所有的玩家显示给定消息。
- Sender - 负责初始化消息的
Actor
。 - Msg - 代表要显示的消息的
String
。 - Type - 可选项。可以用于提供发送消息的其他“类型”的
名称
。
- Sender - 负责初始化消息的
- BroadcastTeam [Sender] [Msg] [Type] - 向与发送者在同一个团队中的所有玩家显示给定消息。
- Sender - 负责初始化消息的
Actor
。 - Msg - 代表要显示的消息的
String
。 - Type - 可选项。可以用于提供发送消息的其他“类型”的
名称
。
- Sender - 负责初始化消息的
- BroadcastLocalized [Sender] [Message] [Switch] [RelatedPRI_1] [RelatedPRI_2] [OptionalObject] - 向游戏中的所有玩家显示本地化后的消息。
- Sender - 负责初始化消息的
Actor
。 - Message - 可以从中获取消息的
LocalMessage
类。 - Switch - 可选项。要显示的消息的索引。
- RelatedPRI_1 - 可选项。可以用于获取在消息中显示的信息的
PlayerReplicationInfo
。 - RelatedPRI_2 - 可选项。 可以用于获取在消息中显示的信息的
PlayerReplicationInfo
。 - OptionalObject - 可选。. 可以在显示消息的过程中使用的
Object
。例如,LocalMessage
类的默认操作是将其视作为Class
对象并在其上调用GetLocalString()
以获取要显示的消息(用于BroadcastDeathMessage
)。
- Sender - 负责初始化消息的
- BroadcastLocalizedTeam [TeamIndex] [Sender] [Message] [Switch] [RelatedPRI_1] [RelatedPRI_2] [OptionalObject] - 向给定团队上的所有玩家显示本地化后的消息。
- TeamIndex - 要向其显示消息的团队的编号。
- Sender - 负责初始化消息的
Actor
。 - Message - 可以从中获取消息的
LocalMessage
类。 - Switch - 可选项。要显示的消息的索引。
- RelatedPRI_1 - 可选项。可以用于获取在消息中显示的信息的
PlayerReplicationInfo
。 - RelatedPRI_2 - 可选项。 可以用于获取在消息中显示的信息的
PlayerReplicationInfo
。 - OptionalObject - 可选。. 可以在显示消息的过程中使用的
Object
。例如,LocalMessage
类的默认操作是将其视作为Class
对象并在其上调用GetLocalString()
以获取要显示的消息(用于BroadcastDeathMessage
)。
踢出
- KickIdler [PC] - 通过
AccessControl::KickPlayer()
从游戏中移除给定玩家。- PC - 要踢出的玩家的
PlayerController
。
- PC - 要踢出的玩家的
- Kick [S] - 从游戏中移除给定玩家。
- S - 指出要被移除的玩家的
String
。它应该是玩家的PlayerName
或PlayerID
。
- S - 指出要被移除的玩家的
- ForceKickPlayer [PC] [KickReason] - 从游戏中移除给定玩家,不考虑管理员状态。
- PC - 要踢出的玩家的
PlayerController
。 - KickReason - 说明玩家被移除的原因的
String
。
- PC - 要踢出的玩家的
- KickBan [S] - 从游戏中移除给定玩家并阻止他们,拒绝重新进入。
- S - 指出要被移除的玩家的
String
。它应该是玩家的PlayerName
或PlayerID
。
- S - 指出要被移除的玩家的
网络/复制
- InitGameReplicationInfo - 初始化游戏的
GameReplicationInfo
。 - StartOnlineGame - 通过
StartMatch()
进行调用,通知在线系统开始游戏并等待回调。通知每个连接的客户端在进展过程中标记它们的会话。 - OnStartOnlineGameComplete [SessionName] [bWasSuccessful] - 在线系统完成游戏启动后进行调用。
- SessionName - 会话的
Name
。 - bWasSuccessful - 如果该属性为 TRUE,那么在线系统可以成功完成游戏启动,应该注册所有客户端。
- SessionName - 会话的
- EndOnlineGame - 通过
PerformEndGameHandling()
进行调用,通知在线系统结束这个游戏,并通知所有客户端也结束游戏。 - GetNetworkNumber - 返回主机的 IP 地址。
- RequiresPassword - 返回游戏是否需要密码才能加入。
- ReplicateStreamingStatus [PC] - 将当前关卡动态载入状态复制到给定的
PlayerController
。- PC - 要复制动态载入状态的玩家的
PlayerController
。
- PC - 要复制动态载入状态的玩家的
- BestNextHostSort [A] [B] - 返回给定主机中首选项。用于整理最合适的主机的列表。第一个是对等连接最多的客户端。然后根据加入时间进行排列,这样首选的就是最新玩家。
- [A/B] - 要排列的主机的
PlayerControllers
。
- [A/B] - 要排列的主机的
- UpdateBestNextHosts - 在当前服务器上更新下一个最合适主机的列表,然后同时将这个列表复制到所有客户端。
- UpdateNetSpeeds - 使用新网速更新游戏中的所有
PlayerControllers
。 - CalculatedNetSpeed - 计算由
MinDynamicBandwidth
和MaxDynamicBandwidth
限定的当前网速。 - WriteOnlineStats - 通知所有客户端写入统计数据,然后控制写入本地统计数据。
- WriteOnlinePlayerScores - 如果比赛经过仲裁,那么通知所有客户端写出它们的玩家分数副本。如果没有经过仲裁, 那么它只允许第一个本地玩家写入分数。
- UpdateGameSettings - 用于更新需要公布给搜索游戏的玩家的游戏设置中的任何变更的函数存根。子类需要重载这个函数。
- UpdateGameSettingsCounts - 更新在线子系统的信息获取玩家总数,这样 LAN 比赛才可以显示正确的玩家总数。
- ProcessClientRegistrationCompletion [PC] [bWasSuccessful] - 通知游戏给定玩家已经完成仲裁注册的函数存根。子类应该重新载入这个属性,处理完成注册。
- PC - 完成注册的玩家的
PlayerController
。 - bWasSuccessful - 如果该属性为 TRUE,那么注册成功。
- PC - 完成注册的玩家的
- StartArbitrationRegistration - 开始异步注册的函数存根。子类需要重载这个函数。
- StartArbitratedMatch - 开始仲裁比赛的函数存根。子类需要重载这个函数。
- RegisterServerForArbitration - 注册服务器进行仲裁的函数存根。子类需要重载这个函数。
- ArbitrationRegistrationComplete [SessionName] [bWasSuccessful] - 在完成服务器为仲裁而进行的注册时调用的函数存根。
- SessionName - 会话的
Name
。 - bWasSuccessful - 如果该属性为 TRUE,那么注册成功。
- SessionName - 会话的
- NotifyArbitratedMatchEnd - 在仲裁比赛结束并通知所有客户端断开连接进入菜单画面的时候进行调用。
- ProcessServerLogin - 检查在命令行上传递的登录参数。如果存在,它会在开始专用服务器注册过程之前进行异步登录。如果在进行登录的过程中,返回 TRUE。
- ClearAutoLoginDelegates - 在登录过程完成或失败后清除登录代理。
- OnLoginFailed [LocalUserNum] [ErrorCode] - 在服务器登录失败并调用
ClearAutoLoginDelegates()
的情况下进行调用。- LocalUserNumber - 关联用户的控制器编号。
- ErrorCode - 发生的
EOnlineServerConnectionStatus
异步错误代码。
- OnLoginChanged [LocalUserNum] - 在服务器登录完成并注册服务器后进行调用。
- LocalUserNumber - 未使用。
- RegisterServer - 注册附带在线服务的专用服务器。
- OnServerCreateComplete [SessionName] [bWasSuccessful] - 在完成专用服务器注册时进行调用。
- SessionName - 会话的
Name
。 - bWasSuccessful - 如果该属性为 TRUE,那么注册成功。
- SessionName - 会话的
- TellClientsToReturnToPartyhost - 迭代玩家控制器并通知他们返回他们的那一方。
- TellClientsToTravelToSession [SessionName] [SearchClass] [PlatformSpecificInfo] - 迭代玩家控制器并通知远程玩家转换到指定的会话。
- SessionName - 要注册的会话的
Name
。 - SearchClass - 应该填充这个会话的
OnlineGameSearch
类。 - PlatformSpecificInfo - 要放置在特定平台区域的二进制数据。
- SessionName - 要注册的会话的
- AddInactivePRI [PRI] [PC] - 将给定
PlayerReplicationInfo
添加到无效列表并将其从有效列表中移除。- PRI - 要添加到无效列表中的玩家的
PlayerReplicationInfo
。 - PC - 与
PRI
关联的玩家的PlayerController
。
- PRI - 要添加到无效列表中的玩家的
- FindInactivePRI [PC] - 查找并返回与给定重新进入的玩家相关的 PRI。
- PC - 玩家的
PlayerController
。
- PC - 玩家的
- OverridePRI [PC] [OldPRI] - 如果需要,重新载入具有之前在登录过程中分配的
PlayerReplicationInfo
中属性的给定玩家的PlayerReplicationInfo
属性。- PC - 玩家的
PlayerController
。 - OldPRI - 含有登录时分配的属性的
PlayerReplicationInfo
。
- PC - 玩家的
暂停
- CanUnpause - 代理。在请求游戏取消暂停的时候进行调用,可以确定是否允许这项操作。在游戏可以取消暂停的情况下返回 TRUE。默认执行函数可以使所有的请求成功。
- SetPause [PC] [CanUnpauseDelegate] - 暂停游戏,然后将代理添加到列表中,前提是给定玩家有权利暂停游戏。调用代理查看它是否可以正常取消暂停,例如,已经声明暂停游戏的原因。
- PC - 尝试暂停游戏的玩家的
PlayerController
。 - CanUnpauseDelegate - 将用于确定是否可以许可该暂停的代理(与
CanUnpause
代理的签名匹配)。
- PC - 尝试暂停游戏的玩家的
- ClearPause - 检查代理列表以确定是否允许暂停。如果代理声明可以取消暂停,那么将该代理从该列表中移除并检查剩下的代理。当列表为空的时候,游戏可以取消暂停。
- ForceClearUnpauseDelegates [PauseActor] - 强制从暂停列表中移除一个对象的
CanUnpause
代理。 如果这个列表中存在任何对象的CanUnpause
代理处理器,那么触发调用ClearPause()
。在销毁玩家控制器的过程中进行调用,以防在取消暂停游戏之前销毁将游戏暂停的 PC 时游戏被困在暂停状态。- PauseActor - 要清除所有
CanUnpause
代理的Actor
。
- PauseActor - 要清除所有
- AllowPausing [PC] - 返回是否允许给定玩家暂停游戏。
- PC - 请求暂停游戏的玩家的
PlayerController
。
- PC - 请求暂停游戏的玩家的
Gameplay(游戏性)
- SetGameSpeed [T] - 将游戏速度和世界
TimeDilation
设置为指定值。它可以控制执行游戏的Timer()
的频率。 - AllowCheats [P] - 返回游戏中是否允许使用秘技。默认情况下,只允许在脱机状态下使用秘技。
- UpdateGameplayMuteList [PC] - 用于通知游戏类型现在可以更新玩家的游戏可玩性特定静噪信息。=玩家= 需要在可以进行这项操作的时候通知服务器,否则唯一的网络 id 将会不正确,同时静噪无法正常工作。
- PC - 要更新静噪信息的玩家的
PlayerController
。
- PC - 要更新静噪信息的玩家的
- RecalculateSkillRating - 游戏类型可以使用它为游戏更新展现的技能。
- MatineeCancelled - 当 PC 处于过场动画模式时进行调用,同时用户会取消它的 matinee。
- GetCoverReplicator - 返回游戏的
CoverReplicatorBase
。如果不存在,生成一个新的CoverReplicatorBase
,然后返回。 - NotifyKilled [Killer] [Killed] [KilledPawn] [damageType] - 通知给定玩家它已经被销毁。通过
Killed()
进行调用。- Killer - 执行杀死操作的玩家的
Controller
。 - Killed - 被杀死的玩家的
Controller
。 - KilledPawn - 被杀死的玩家的
Pawn
。 - damageType - 致使玩家死亡的杀害的
DamageType
。
- Killer - 执行杀死操作的玩家的
- Killed [Killer] [KilledPlayer] [KilledPawn] [damageType] - 通过
Pawn
进行调用通知游戏它已经被杀死。- Killer - 执行杀死操作的玩家的
Controller
。 - Killed - 被杀死的玩家的
Controller
。 - KilledPawn - 被杀死的玩家的
Pawn
。 - damageType - 致使玩家死亡的杀害的
DamageType
。
- Killer - 执行杀死操作的玩家的
- PreventDeath [KilledPawn] [Killer] [DamageType] [HitLocation] - 通过
Pawn
进行调用,允许游戏重新载入被杀死的Pawn
。- KilledPawn - 被杀死的玩家的
Pawn
。 - Killer - 执行杀死操作的玩家的
Controller
。 - DamageType - 致使玩家死亡的伤害的
DamageType
。 - HitLocation - 明确致使玩家死亡的致命一击的位置的
Vector
。
- KilledPawn - 被杀死的玩家的
- ReduceDamage [Damage] [injured] [instigatedBy] [HitLocation] [Momentum] [DamageType] [DamageCauser] - 在对玩家施加伤害的时候通过
TakeDamage()
进行调用,允许修改的伤害量。- Damage - 输出。接受和输出要施加的伤害量。
- injured - 被伤害的玩家的
Pawn
。 - instigatedBy - 导致伤害的玩家的
Controller
。 - HitLocation - 明确引发伤害的攻击位置的
Vector
。 - Momentum - 指定伤害所产生的冲力的方向和大小的
Vector
。 - DamageType - 所施加的伤害的
DamageType
。 - DamageCauser - 实际会导致伤害的
Actor
。
- AddObjectiveScore [Scorer] [Score] - 在完成目标后增加指定玩家的分数。
- Scorer - 玩家的
PlayerReplicationInfo
。 - Score - 要增加的玩家分数值。
- Scorer - 玩家的
- ScoreObjective [Scorer] [Score] - 增加玩家分数,然后检查游戏是否应该在完成目标之后结束。
- Scorer - 玩家的
PlayerReplicationInfo
。 - Score - 要增加的玩家分数值。
- Scorer - 玩家的
- CheckScore [Scorer] - 通过
ScoreObjective()
进行调用,确定游戏是否应该根据给定玩家的分数结束。- Scorer - 玩家的
PlayerReplicationInfo
。
- Scorer - 玩家的
- ScoreKill [Killer] [Other] - 添加玩家分数,然后检查游戏是否应该在死亡一次之后结束。
- Killer - 致使玩家死亡的玩家的
Controller
。 - Other - 死亡的玩家的
Controller
。
- Killer - 致使玩家死亡的玩家的
选项
- GrabOption [Options] [Result] - 从选项字符串中解析下一个键值对。如果发现键值对,那么返回 TRUE。
- Options - 输出。接受当前选项字符串并输出减去已经解析的键值对的选项字符串。
- Result - 输出。输出已解析键值对。
- GetKeyValue [Pair] [Key] [Value] - 将一个键值对拆分为键和值。
- Pair - 接收键值对。
- Key - 输出。输出键。.
- Value - 输出。输出值。
- ParseOption [Options] [InKey] - 从选项字符串中位给定键解析键值对。以
String
的形式返回键值对。- Options - 接收当前的选项字符串。
- InKey - 查找的键。
- HasOption [Options] [InKey] - 返回在选项字符串中是否存在给定键的键值对。
- Options - 接收当前的选项字符串。
- InKey - 查找的键。
- GetIntOption [Options] [ParseString] [CurrentValue] - 为选项字符串中的给定键返回
Int
值。- Options - 接收当前的选项字符串。
- ParseString - 要查找的键。
- CurrentValue - 当前或者是默认情况下,没有找到键时要使用的值。
设置器
- AddMutator [mutname] [bUserAdded] - 将指定的设置器添加到游戏中。
- mutname - 指定要添加的设置器类的
string
。 - bUserAdded - 如果该属性为 TRUE,那么玩家可以通过游戏界面添加这个设置器。
- mutname - 指定要添加的设置器类的
- RemoveMutator [MutatorToRemove] - 从游戏中移除指定设置器。
- MutatorToRemove - 要移除的
Mutator
。
- MutatorToRemove - 要移除的
- AllowMutator [MutatorClassName] - 返回是否可以将指定的
Mutator
类添加到游戏中。- MutatorClassName - 指定要检查的设置器类的
string
。
- MutatorClassName - 指定要检查的设置器类的
- Mutate [MutateString] [Sender] - 将输入字符串传递到设置器列表。 供 PlayerController.Mutate() 使用,目的是允许设置器具有输入可执行函数(通过将 mutate xxx 绑定到键)。
- MutateString - 要传递到设置器列表的
String
。 - Sender - 发送 mutate 字符串的玩家的
PlayerController
。
- MutateString - 要传递到设置器列表的
- CheckRelevance [Other] - 如果 actor 与该游戏相关而且不得被销毁,那么返回 TRUE。 在
Actor::PreBeginPlay()
中调用,目的是允许设置器移除或替换生成的 actor。- Other - 要检查相关性的
Actor
。
- Other - 要检查相关性的
- ModifyScoreKill [Killer] [Other] - 将游戏中杀人传递到设置器列表以进行积分。
- Killer - 致使玩家死亡的玩家的
Controller
。 - Other - 死亡的玩家的
Controller
。
- Killer - 致使玩家死亡的玩家的
- DriverEnteredVehicle [V] [P] - 将进入载具事件传递到设置器列表。
- V - 进入的
Vehicle
。 - P - 进入载具的玩家的
Pawn
。
- V - 进入的
- CanLeaveVehicle [V] [P] - 检查给定的
Pawn
是否可以离开指定的Vehicle
。允许设置器列表决定是否存在设置器。- V - 被退出的
Vehicle
。 - P - 退出载具的玩家的
Pawn
。
- V - 被退出的
- DriverLeftVehicle [V] [P] - 将退出载具事件传递到设置器列表。
- V - 被退出的
Vehicle
。 - P - 退出载具的玩家的
Pawn
。
- V - 被退出的
秘技检测
- EnableStandbyCheatDetection [bIsEnabled] - 启动或关闭备用检测。
- bIsEnabled - 如果该属性为 TRUE,那么启用秘技检测。否则,关闭检测。
- StandbyCheatDetected [StandbyType] - 通知游戏代码检测到一个备用的秘技。
- StandbyType - 检测到的秘技的
EStandbyType
。
- StandbyType - 检测到的秘技的
自动测试
- DoTravelTheWorld - 开始世界转换进行自动测试。
- IsAutomatedPerfTesting - 在启用 Automated Performance 测试的情况下返回 true。
- IsCheckingForFragmentation - 在启用检查碎片的情况下返回 true。
- IsCheckingForMemLeaks - 在启用检查内存泄露的情况下返回 true。
- IsDoingASentinelRun - 在传送器运行的情况下返回 true。
- ShouldAutoContinueToNextRound - 在可以自动继续下一回合的情况下返回 true。
- CheckForSentinelRun - 如果需要,请求
AutoTestManager
开始运行传送器。 必须通过 gameinfo 子类进行调用,不可以在GameInfo::StartMatch()
的基础执行函数中调用。
游戏生命周期
游戏的生命周期,创建游戏类型后,如何创建玩家,游戏如何检查结束条件等等,它是要了解的重要内容。它有助于改写引擎,使其可以适应您的特定游戏类型。在 UnrealScript 游戏流程文档中提供了从引擎启动到游戏类型自己的生命周期的游戏流程的完整纲要。
游戏类型前缀
虚幻引擎 3 中的游戏类型系统提供了一种方法,即自动选择相应的 GameInfo
类根据赋予地图文件名的前缀应用于地图。=DefaultMapPrefixes= 和 CustomMapPrefixes
数组都含有一个 GameTypePrefix
结构体列表,其中每个结构体都会将特定的前缀字符串映射到游戏类型类(除了其他方面)。
GameTypePrefix 结构体
- Prefix - 指定地图前缀的
String
。地图前缀是一系列以地图名称开始后面紧跟着连字符 (-) 的字符。连字符不包括在前缀中。它只需将前缀从地图名称的剩余部分中分离出来。 - bUseCommonPackage - 如果该属性为 TRUE,那么要为这个游戏类型生成通用软件包。请参阅通用软件包了解更多详细信息。
- GameType - 指定要映射到前缀的游戏类型的类的
String
。它是可以在含有这个前缀的地图中使用的预习类型,前日是URL
中没有指定游戏类型。 - AdditionalGameTypes - 一个通过该 URL 指定这个地图前缀支持的其他游戏类型类的
Strings
数组。 - ForcedObjects - 应该强制进入通用软件包的对象(和类),这样可以避免烘焙到每个地图中。
添加游戏类型前缀
通过在 DefaultGame.ini
配置文件的 [Engine.GameInfo]
部分中创建新的项添加游戏类型前缀映射。如下所示:
[Engine.GameInfo] +DefaultMapPrefixes=(Prefix="DM",bUsesCommonPackage=FALSE,GameType="UTGame.UTDeathmatch")
通用软件包
稍后完成
暂停
通过在 GameInfo
上调用 SetPause()
暂停游戏。=SetPause()= 可以接受代理作为添加到这个数组中的一个参数。在由于某种原因暂停游戏的时候,会将可以检查确保条件没有问题的特殊代理传递到 SetPause()
。
例如,在 PlayerController.uc
中控制器插入电源或拔出电源时,它会在 PlayerController
上调用 SetPause()
将其传递给 CanUnpauseControllerConnected
函数,随后将这个函数传递给 GameInfo
的 SetPause()
:
// 在移除控制器的情况下暂停,否则,取消暂停 SetPause(!bIsConnected,CanUnpauseControllerConnected);
CanUnpauseControllerConnected
函数只返回控制器是否插入电源。
如果没有将代理传递到 GameInfo
中的 SetPause
函数,那么请使用通常返回 true 的默认 CanUnpause
函数。这种情况就是玩家只需要暂停游戏,因为在他们取消暂停游戏的时候没有检查特殊条件。
然后在调用 ClearPause()
取消暂停游戏的时候,会执行 Pausers
数组中的每个代理。如果代理返回 TRUE,那么会将其从数组中移除。只有在数组为空的时候,游戏才会取消暂停。
设置器
设置器是可以应用于游戏修改游戏可玩性的某些内容的特殊 Actor。例如,Mutators 可以进行以下操作:
- 修改玩家登录参数
- 修改玩家的 Pawn 属性
- 修改、移除或替换任何或所有 Actors(不满足 bGameRelevant=TRUE 条件)
- 重新载入玩家开始位置
- 修改游戏结束条件
上面的项只是 Mutators 可以修改的某些游戏内容。
添加设置器
通过 GameInfo
中的 AddMutator()
函数将设置器添加到游戏中。它可以通过任何其他 Actor 进行调用,在游戏过程中允许动态添加设置器,以修改与游戏可玩性事件对应的某些内容。默认情况下,可以通过 InitGame()
进行调用,添加在地图 URL 中指定的任何设置器。
通过在要添加的设置器列表前面添加 Mutator=
可以在地图 URL 中指定设置器,每个设置器用逗号分隔。比如:
MapName?Game=GameName?Mutator=BigHeads,Instagib
这个地图 URL 将会使用稍后会添加 BigHeads
和 Instagib
的 GameName
游戏类型加载 MapName
地图。使用这种方式添加 Mutator 的地图 URL 通常可以通过一个允许玩家选择要使用的 Mutator 的菜单动态创建。同时它还可以硬编码一个或多个“默认”设置器,通过在游戏类型的 InitGame()
事件中为 Mutator 明确添加 AddMutator()
调用将其添加给一个特殊的游戏类型。