日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

(转载)(官网)UE4--Game Mode 和 Game State

發(fā)布時間:2023/12/19 综合教程 56 生活家
生活随笔 收集整理的這篇文章主要介紹了 (转载)(官网)UE4--Game Mode 和 Game State 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Game Mode 和 Game State

本頁面的內(nèi)容:

Game Modes
Game State

兩個主要類負(fù)責(zé)處理進(jìn)行中游戲的相關(guān)信息:Game ModeGame 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ù)/事件

目的

InitGame

InitGame事件在其他腳本之前調(diào)用(包括PreInitializeComponents),由AGameModeBase使用,初始化參數(shù)并生成其助手類。

它在任意 Actor 運行PreInitializeComponents前調(diào)用(包括 Game Mode 實例自身)。

PreLogin

接受或拒絕嘗試加入服務(wù)器的玩家。如它將ErrorMessage設(shè)為一個非空字符串,會導(dǎo)致Login函數(shù)失敗。PreLoginLogin前調(diào)用,Login 調(diào)用前可能需要大量時間,加入的玩家需要下載游戲內(nèi)容時尤其如此。

PostLogin

成功登錄后調(diào)用。這是首個在PlayerController上安全調(diào)用復(fù)制函數(shù)之處。OnPostLogin可在藍(lán)圖中實現(xiàn),以添加額外的邏輯。

HandleStartingNewPlayer

PostLogin后或無縫游歷后調(diào)用,可在藍(lán)圖中覆蓋,修改新玩家身上發(fā)生的事件。它將默認(rèn)創(chuàng)建一個玩家 pawn。

RestartPlayer

調(diào)用開始生成一個玩家 pawn。如需要指定 Pawn 生成的地點,還可使用RestartPlayerAtPlayerStartRestartPlayerAtTransform函數(shù)。OnRestartPlayer可在藍(lán)圖中實現(xiàn),在此函數(shù)完成后添加邏輯。

SpawnDefaultPawnAtTransform

這實際生成玩家 Pawn,可在藍(lán)圖中覆蓋。

Logout

玩家離開游戲或被摧毀時調(diào)用??蓪崿F(xiàn)OnLogout執(zhí)行藍(lá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

AGameModeAGameModeBase的子類,擁有一些額外的功能支持多人游戲和舊行為。所有新建項目默認(rèn)使用AGameModeBase。如果需要此額外行為,可切換到從AGameMode進(jìn)行繼承。如從AGameMode進(jìn)行繼承,也可從AGameState繼承游戲狀態(tài)(其支持比賽狀態(tài)機)。

AGameMode包含一個跟蹤比賽狀態(tài)或整體游戲流程的狀態(tài)機??墒褂?code>GetMatchState或HasMatchStartedIsMatchInProgressHasMatchEnded之類的封裝器查詢當(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返回trueStartMatch被調(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ù)或變量

使用

GetServerWorldTimeSeconds

這是UWorld函數(shù)GetTimeSeconds的服務(wù)器版本,將在客戶端和服務(wù)器上同步,因此該時間可用于復(fù)制,十分可靠。

PlayerArray

這是所有APlayerState對象的陣列,對游戲中所有玩家執(zhí)行操作時十分實用。

HasBegunPlay

BeginPlay函數(shù)在游戲中的 actor 上調(diào)用,則返回 true。

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。