ue4联网和多人游戏总结(第二部分)
1.3.1 網絡模式和服務器類型
網絡模式
描述了計算機與網絡多人游戲會話的關系。游戲實例可采用以下任意網絡模式:
擁有游戲副本的用戶均可啟動聆聽服務器并在同一計算機上運行,因此聆聽服務器對于用戶而言較易自發設置。支持聆聽服務器的游戲通常擁有游戲UI,用于啟動服務器或搜索要加入的服務器。但由于主持聆聽服務器的玩家會直接在服務器上游戲,因此比其他必須使用網絡連接方可游戲的玩家更具優勢,于是便導致了公平和作弊問題。同時,要作為服務器運行,還需支持如圖形和音效等玩家相關系統,從而引發額外處理負載。此類因素導致聆聽服務器不適用于激烈的競技或網絡負載極高的游戲,但對于小型玩家群體間進行臨時合作和競技多人游戲而言,卻十分好用。
專屬服務器成本更高,更難以配置,需要獨立于所有參與玩家的計算機,并需要完成自身網絡連接。但所有加入專屬服務器的玩家均使用相同類型的連接進行游戲,從而保證了公平性。
由于專屬服務器不會渲染圖形或執行僅與本地玩家相關的其它邏輯,因此還可高效處理gameplay和網絡。
因此,出于安全、公平或可靠方面的原因,專屬服務器更適用于需要大量玩家或需要高效執行、可信服務器的游戲。此類游戲包括MMO、競技MOBA,或快節奏網絡射擊游戲。
因為獨立游戲服務器可同時作為服務器和客戶端,為多人游戲創建的邏輯可在無需額外工作的情況下,在單人游戲中運行。
1.3.2 Actor復制
復制是指在網絡會話中的不同機器間復制游戲狀態信息。若正確設置復制,將可同步不同機器的游戲實例。多數Actor默認不會啟用復制,且將本地執行所有功能。在C++ Actor類中設置 b Replicates 變量,
或將Actor藍圖的 復制(Replicates) 設置設為 true,可啟用給定類的Actor復制。
以下為創建網絡游戲時的常見復制功能:
雖然創建、銷毀和移動等常見使用可自動處理,但即使啟用復制,其他所有gameplay功能也不會默認自動復制。必須根據游戲的需求明確指定要復制的變量和函數。欲了解上述所有復制功能的詳情,參見Actor復制 指南。
Actor、Pawn和角色的部分常用功能不會復制:
此類項目均在所有客戶端上單獨運行。但是,若復制驅動此類視覺元素的變量,則可確保所有客戶端都具有相同信息,從而以大致相同的方式進行模擬。
1.4 網絡角色和授權
Actor的 網絡角色 將決定網絡游戲期間控制Actor的機器。授權 Actor被認為可控制Actor的狀態,并可將信息復制到網絡多人游戲會話中的其他機器上。
遠程代理 是該Actor在遠程機器上的副本,其將接收授權Actor中的復制信息。其由 Local Role 和 Remote Role 變量進行追蹤,可取以下值:
虛幻引擎使用的默認模型是 服務器授權,意味著**服務器對游戲狀態固定具有權限,而信息固定從服務器復制到客戶端。**服務器上的Actor應具有授權的本地角色,而其在遠程客戶端上的對應Actor應具有模擬或自主代理的本地角色。
欲了解Actor網絡角色,參見Actor角色和遠程角色 指南。
1.5 客戶端擁有權
特定客戶端機器上的 Player Controller 擁有網絡游戲中的pawn。Pawn調用純客戶端函數時,其將無視調用函數的機器,而僅指向擁有玩家的機器。若將Actor的 Owner 變量設為特定Pawn,則通關關聯,該Actor屬于該Pawn的擁有客戶端,并將純客戶端函數指向其擁有者的機器。可使用C++中的 Is Locally Controlled 函數,或藍圖中的 Is Locally Controlled 節點,以決定Pawn是否在其擁有客戶端上。
由于構造期間Pawn可能未指定控制器,因此避免在自定義Pawn類的構造函數中使用 Is Locally Controlled。
有關擁有權的詳情,參見Actor及其擁有連接 上的指南。
1.5.1 相關性和優先級
相關性 用于決定是否需要在多人游戲期間復制Actor。復制期間將剔除被認為不相關的actor。此操作可節約帶寬,以便相關Actor可更加高效地復制。若Actor未被玩家擁有,且不在玩家附近,將其被視為不相關,而不會進行復制。
不相關Actor會存在于服務器上,且會影響授權游戲狀態,但在玩家靠近前不會向客戶端發送信息。覆蓋 Is Net Relevant For 函數以手動控制相關性,
并可使用 Net Cull Distance Squared 屬性決定成為相關Actor所需距離。
有時在游戲單幀內,沒有足夠帶寬供復制所有相關Actor。因此,Actor擁有 優先級(Priority) 值,用于決定優先復制的Actor。
Pawn和Player Controller的 Net Priority 默認為 3.0,從而使其成為游戲中最高優先級的Actor,而基礎Actor的 Net Priority 為 1.0。Actor在被復制前經歷的時間越久,每次成功通過時所處的優先級便越高。
欲了解Actor相關性和優先級的詳情,參見網絡優先級 上的指南。
1.6 變量復制
在C++中使用對應 UPROPERTY 宏內的 Replicated 或 Replicate Using 說明符,或在藍圖的細節面板中將它們指定為已復制,可將復制添加到變量和對象引用。授權Actor上復制變量的值變更時,其信息將自動從授權Actor發送到連接會話的遠程代理。
1.6.1 Rep Notify
可指定在Actor成功接收特定變量的復制信息時要調用的 Rep Notify 函數。Rep Notify僅在變量更新時本地觸發。觸發gameplay邏輯響應授權Actor上的變量更改時,使用Rep Notify可減少開銷。在C++中使用變量的 UPROPERTY 宏的 Replicated Using 說明符可訪問此功能,或修改藍圖中變量的復制設置以使用Rep Notify。
由于Rep Notify可添加到需復制的變量中,而無需考慮其他gameplay功能,創建額外網絡調用時刻節約大量帶寬,因此Rep Notify比RPC或復制函數更加好用。
總結
以上是生活随笔為你收集整理的ue4联网和多人游戏总结(第二部分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 模拟电路和数字电路
- 下一篇: 阿克曼函数实现(Java代码)