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