(转载)(官网)UE4--Game Mode 和 Game State
Game Mode 和 Game State
本頁面的內(nèi)容:
Game Modes
Game State
兩個主要類負(fù)責(zé)處理進(jìn)行中游戲的相關(guān)信息:Game Mode和Game State。
即使最開放的游戲也擁有基礎(chǔ)規(guī)則,而這些規(guī)則構(gòu)成了Game Mode。在最基礎(chǔ)的層面上,這些規(guī)則包括:
出現(xiàn)的玩家和觀眾數(shù)量,以及允許的玩家和觀眾最大數(shù)量。
玩家進(jìn)入游戲的方式,可包含選擇生成地點和其他生成/重生成行為的規(guī)則。
游戲是否可以暫停,以及如何處理游戲暫停。
關(guān)卡之間的過渡,包括游戲是否以動畫模式開場。
基于規(guī)則的事件在游戲中發(fā)生,需要進(jìn)行追蹤并和所有玩家共享時,信息將通過Game State進(jìn)行存儲和同步。這些信息包括:
游戲已運行的時間(包括本地玩家加入前的運行時間)。
每個個體玩家加入游戲的時間和玩家的當(dāng)前狀態(tài)。
當(dāng)前 Game Mode 的基類。
游戲是否已開始。
Game Modes
特定的基礎(chǔ)(如進(jìn)行游戲所需要的玩家數(shù)量,或玩家加入游戲的方法)在多種類型的游戲中具有共通性??筛鶕?jù)開發(fā)的特定游戲進(jìn)行無窮無盡的規(guī)則變化。無論規(guī)則如何,Game Modes 的任務(wù)都是定義和實現(xiàn)規(guī)則。Game Modes 當(dāng)前常用的基類有兩個。
4.14 版本中加入了AGameModeBase,這是所有 Game Mode 的基類,是經(jīng)典的AGameMode簡化版本。AGameMode是 4.14 版本之前的基類,仍然保留,功能 如舊,但現(xiàn)在是AGameModeBase的子類。由于其比賽狀態(tài)概念的實現(xiàn),AGameMode更適用于標(biāo)準(zhǔn)游戲類型(如多人射擊游戲)。AGameModeBase簡潔高效,是新代碼項目中包含的全新默認(rèn)游戲模式。
AGameModeBase
所有 Game Mode 均為AGameModeBase的子類。而AGameModeBase包含大量可覆蓋的基礎(chǔ)功能。部分常見函數(shù)包括:
|
函數(shù)/事件 |
目的 |
|---|---|
|
|
它在任意 Actor 運行 |
|
|
接受或拒絕嘗試加入服務(wù)器的玩家。如它將 |
|
|
成功登錄后調(diào)用。這是首個在 |
|
|
在 |
|
|
調(diào)用開始生成一個玩家 pawn。如需要指定 Pawn 生成的地點,還可使用 |
|
|
這實際生成玩家 Pawn,可在藍(lán)圖中覆蓋。 |
|
|
玩家離開游戲或被摧毀時調(diào)用??蓪崿F(xiàn) |
可針對游戲提供的每個比賽格式、任務(wù)類型或特殊區(qū)域創(chuàng)建AGameModeBase的子類。一款游戲可擁有任意數(shù)量的 Game Mode,因此也可擁有任意數(shù)量的AGameModeBase類子類;然而,給定時間上只能使用一個 Game Mode。每次關(guān)卡進(jìn)行游戲?qū)嵗瘯r Game Mode Actor 將通過UGameEngine::LoadMap()函數(shù)進(jìn)行實例化。
Game Mode 不會復(fù)制到加入多人游戲的遠(yuǎn)程客戶端;它只存在于服務(wù)器上,因此本地客戶端可看到之前使用過的留存 Game Mode 類(或藍(lán)圖);但無法訪問實際的實例并檢查其變量,確定游戲進(jìn)程中已發(fā)生哪些變化。如玩家確實需要更新與當(dāng)前 Game Mode 相關(guān)的信息,可將信息保存在一個AGameStateBaseActor 上,輕松保持同步。AGameStateBaseActor 隨 Game Mode 而創(chuàng)建,之后被復(fù)制到所有遠(yuǎn)程客戶端。
AGameMode
AGameMode是AGameModeBase的子類,擁有一些額外的功能支持多人游戲和舊行為。所有新建項目默認(rèn)使用AGameModeBase。如果需要此額外行為,可切換到從AGameMode進(jìn)行繼承。如從AGameMode進(jìn)行繼承,也可從AGameState繼承游戲狀態(tài)(其支持比賽狀態(tài)機)。
AGameMode包含一個跟蹤比賽狀態(tài)或整體游戲流程的狀態(tài)機??墒褂?code>GetMatchState或HasMatchStarted、IsMatchInProgress和HasMatchEnded之類的封裝器查詢當(dāng)前的狀態(tài)。以下是可能的比賽狀態(tài):
EnteringMap是初始狀態(tài)。Actor 尚未進(jìn)行 tick,世界場景尚未完整初始化。內(nèi)容完整加載后將過渡到下個狀態(tài)。
WaitingToStart是下個狀態(tài),進(jìn)入時將調(diào)用HandleMatchIsWaitingToStart。Actor 正在進(jìn)行 tick,但玩家尚未生成。如ReadyToStartMatch返回true或StartMatch被調(diào)用,它將過渡到下個狀態(tài)。
InProgress是游戲主體所發(fā)生的狀態(tài)。進(jìn)入此狀態(tài)時將調(diào)用HandleMatchHasStarted,然后在所有 Actor 上調(diào)用BeginPlay。此時,正常游戲進(jìn)程已在進(jìn)行中。ReadyToEndMatch返回true或調(diào)用EndMatch時比賽將過渡到下個狀態(tài)。
WaitingPostMatch是倒數(shù)第二個狀態(tài),進(jìn)入時將調(diào)用HandleMatchHasEnded。Actor 仍在 tick,但新玩家無法加入。地圖轉(zhuǎn)換開始時它將過渡到下個狀態(tài)。
LeavingMap是正常流程中的最后一個狀態(tài),進(jìn)入時將調(diào)用HandleLeavingMap。轉(zhuǎn)換到新地圖時比賽將保持在此狀態(tài)中,進(jìn)入新地圖時將過渡回到EnteringMap。
Aborted是失敗狀態(tài),調(diào)用AbortMatch可開始此狀態(tài)。出現(xiàn)無法恢復(fù)的錯誤時將進(jìn)行此設(shè)置。
游戲狀態(tài)將固定為InProgress,因為這是調(diào)用BeginPlay、actor 開始 tick 的狀態(tài)。然而,個體游戲可能覆蓋這些狀態(tài)的行為,用更復(fù)雜的規(guī)則構(gòu)建一個多人游戲,如在一款多人射擊游戲中等待其他玩家加入時允許玩家在關(guān)卡中自由飛行。
Game Mode 藍(lán)圖
可創(chuàng)建派生自 Game Mode 類的藍(lán)圖,并將它們用作項目或關(guān)卡的默認(rèn) Game Mode。
派生自 Game Mode 的藍(lán)圖可進(jìn)行以下默認(rèn)設(shè)置:
默認(rèn)Pawn類
HUD 類
PlayerController(玩家控制器)類
Spectator 類
Game State 類
Player State 類
此外,Game Mode 的藍(lán)圖十分實用,因為它們無需調(diào)整代碼即可啟用變量調(diào)整。因此可用于使單一 Game Mode 適用到多個不同關(guān)卡,無需使用硬編碼資源引用或為每次調(diào)整請求工程支持和代碼修改。
設(shè)置 Game Mode
設(shè)置關(guān)卡的 Game Mode 有多種,此處的排序從優(yōu)先級最低到最高:
設(shè)置DefaultEngine.ini文件的/Script/EngineSettings.GameMapsSettings部分的GlobalDefaultGameMode輸入將設(shè)置項目中所有地圖的默認(rèn)游戲模式。
[/Script/EngineSettings.GameMapsSettings]
GlobalDefaultGameMode="/Script/MyGame.MyGameGameMode"
GlobalDefaultServerGameMode="/Script/MyGame.MyGameGameMode"
在編輯器中World Settings標(biāo)簽下設(shè)置GameMode Override即可覆蓋個體地圖的項目設(shè)置。
URL 可被傳到可執(zhí)行文件,強制游戲加載時帶特定選項。使用game選項設(shè)置游戲模式。查看命令行參數(shù)中的詳細(xì)內(nèi)容。
UE4Editor.exe /Game/Maps/MyMap?game=MyGameMode -game
最后,可在DefaultEngine.ini文件的/Script/Engine.WorldSettings/部分中設(shè)置地圖前綴(和 URL 法的別名)。這些前綴設(shè)置所有擁有特定前綴的地圖的默認(rèn)游戲模式。
[/Script/EngineSettings.GameMapsSettings]
+GameModeMapPrefixes=(Name="DM",GameMode="/Script/UnrealTournament.UTDMGameMode")
+GameModeClassAliases=(Name="DM",GameMode="/Script/UnrealTournament.UTDMGameMode")
請查閱 [設(shè)置 Game Mode] 文檔中設(shè)置 Game Mode 的范例。
Game State
Game State負(fù)責(zé)啟用客戶端監(jiān)控游戲狀態(tài)。從概念上而言,Game State 應(yīng)該管理所有已連接客戶端已知的信息(特定于 Game Mode 但不特定于任何個體玩家)。它能夠追蹤游戲?qū)用娴膶傩裕缫堰B接玩家的列表、奪旗游戲中的團(tuán)隊得分、開放世界游戲中已完成的任務(wù),等等。
Game State 并非追蹤玩家特有內(nèi)容(如奪旗比賽中特定玩家為團(tuán)隊獲得的分?jǐn)?shù))的最佳之處,因為它們由Player State更清晰地處理。整體而言,GameState 應(yīng)該追蹤游戲進(jìn)程中變化的屬性。這些屬性與所有人皆相關(guān),且所有人可見。Game mode 只存在于服務(wù)器上,而 Game State 存在于服務(wù)器上且會被復(fù)制到所有客戶端,保持所有已連接機器的游戲進(jìn)程更新。
AGameStateBase是基礎(chǔ)實現(xiàn),其部分默認(rèn)功能包括:
|
函數(shù)或變量 |
使用 |
|---|---|
|
|
這是 |
|
|
這是所有 |
|
|
如 |
AGameStateBase通常在 C++ 或藍(lán)圖中延展,包含用于使游戲中玩家知曉當(dāng)前情況的額外變量和函數(shù)。進(jìn)行的特定修改通?;?Game State 的配對 Game Mode。Game Mode 自身也可將其默認(rèn) Game State 類覆蓋為派生自AGameStateBase的任意 C++ 類或藍(lán)圖。
相關(guān)頁面
PlayerController(玩家控制器)
原文地址:https://docs.unrealengine.com/latest/CHN/Gameplay/Framework/GameMode/index.html
總結(jié)
以上是生活随笔為你收集整理的(转载)(官网)UE4--Game Mode 和 Game State的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python发邮件给女朋友代码_pyth
- 下一篇: 筹码怎么看