推薦大家一個寫的很不錯的部落格(深入淺出UE4網絡):https://www.cnblogs.com/Leonhard-/p/6511821.html
舉例講一下C/S模式:
用戶端負責表現、伺服器端負責資料。
-
以掉血為例:
一、玩家A砍了B一刀
二、伺服器計算傷害,修改B的血量
三、把B的血量發給B,A砍B的動作發給所有能看到的玩家
四、用戶端播放掉血量(如果允許可見),播放動作
-
以抽卡為例:
一、用戶端發起抽卡請求
二、伺服器端根據此玩家的消費、等級等随機産生一張卡牌
三、伺服器把結果發給用戶端
四、用戶端播放抽卡動畫,然後出結果。
-
如何防外挂:
一、關鍵的計算,放在伺服器
二、伺服器做足驗證,超出正常人為水準就了解為外挂
三、有些隻能在用戶端計算,可以進行代碼混淆、資源加密
-
語言選擇
一、技術線路的選擇,和需求、偏好、能力都有關
二、用戶端受限于引擎,Cocos(C++,Lua,JS),Unity(C#,Lua),UE4(C++,藍圖)
三、伺服器可選方案更多:C++、Python、Java、PHP
UE4啟動參數或者 bat腳本啟動
-
監聽伺服器
UE4Editor.exe ProjectName MapName?Listen -game -log
-
專用伺服器
UE4Editor.exe ProjectName MapName -server -game -log
-
用戶端
UE4Editor.exe ProjectName ServerIP -game -log
連接配接過程,主要步驟如下:
- 用戶端發送連接配接請求。
- 如果伺服器接受連接配接,則發送目前地圖。
- 伺服器等待用戶端加載此地圖。
- 加載之後,伺服器将在本地調用 AGameMode::PreLogin。這樣可以使 GameMode 有機會拒絕連接配接
- 如果接受連接配接,伺服器将調用 AGameMode::Login, 該函數的作用是建立一個 PlayerController,可用于在今後複制到新連接配接的用戶端。成功接收後,這個 PlayerController 将替代用戶端的臨時 PlayerController (之前被用作連接配接過程中的占位符)。
- 此時将調用 APlayerController::BeginPlay。應當注意的是,在此 actor 上調用 RPC 函數尚存在安全風險。您應當等待 AGameMode::PostLogin 被調用完成。
- 如果一切順利,AGameMode::PostLogin 将被調用。這時,可以放心的讓伺服器在此 PlayerController 上開始調用 RPC 函數。