UE4服務端

原文作者:@玄冬Wong

轉載請註明原文出處:http://aigo.iteye.com/blog/2268777

這是論壇上對UE服務端功能的回答,意思是UE4提供了主流MMO網遊服務端所具備的特性,包括位移修正、物理碰撞檢測。這些特性不是UE4才加入,早期UE版本就有了。

https://answers.unrealengine.com/questions/14311/what-online-multiplayer-features-are-available-and.html

 

UE4自帶的同步機制Reliable

聽了上面所說的,是不是感覺UE4牛逼轟轟呢,但是,然並卵。。shipping模式下構建出來的服務端關閉掉自帶的同步機制,UE4服務端自帶的同步機制只在development和debug模式才默認開啓。另外這種自帶的同步機制(也就是說常說的UFUNCTION(Server, Reliable, WithValidation))的網絡通信性能很低,不適合生產環境,只是適合測試用。這也是爲什麼在Shipping模式下被關閉的原因(從v4.4版本開始,shipping模式關掉了server mode)。如果是要寫MMO等通信性能較高的服務端,建議將ACE、libuv、RakNet等高性能網絡庫加入UE4的C++工程,繞開UE4自身的tcp socket API。

 

 

如何編譯構建獨立專用服務端

下面步驟假設是以development模式來構建,步驟和shipping模式沒差異。

 

下面步驟中假設我們自己的UE4工程名叫:MyProject

1,下載源碼及編譯

https://github.com/EpicGames/UnrealEngine/tags

需要現在unrealengine官網上註冊並加入github開發組纔有權限看到上面的地址。

打開頁面後下載一個最新的release版本,解壓出來後先運行Setup.bat,會自動下載資源文件,大概有幾個G,下載完以後,然後再運行GenerateProjectFiles.bat,會生成VS工程文件,這裏假設你已經安裝好了VS,我用的vs2015旗艦版,生成完以後打開VS,build類型選擇debuggame editor或者development editor,並編譯。

 

2,切換工程的UE4版本

右鍵點擊你的UE4工程文件MyProject.uproject -》 Switch Unreal Engine version,選擇剛剛編譯出來的UE4,切換版本以後,再右擊*.uproject並選擇:Generate Visual Studio project files,最後啓動VS,啓動VS之後再選擇一種build類型來編譯工程並啓動,這裏測試用的是development editor類型。

 

3,cook client content

上面第二步編譯並啓動運行工程後,這一步來打包客戶端(官方文檔上叫cook client content),方法和正常客戶端版本打包的步驟一樣:

Package Project -》 Windows -》 Windows x64。

有人可能會問,安裝版本的UE4爲什麼有沒PS4、Xbox等打包選項?是的,只有源碼編譯的UE4纔有這些選項。

這裏我們假設打包時選擇的輸出目錄爲:D:/PackageTest/,那麼輸出的客戶端exe文件就在D:/PackageTest/WindowsNoEditor/MyProject/Binariesk/Win64/MyProject.exe

這個目錄位置會在後面步驟中用到。

 

如果不cook client content,則後面啓動服務端時會報錯:

Error: The global shader cache file 'F:/EpicGames/UnrealEngine/Engine/GlobalShaderCache-PCD3D_SM5.bin' is missing.

 

還有一個純藍圖UE4工程的構建bug問題:

這個問題v4.7版本時還存在,當前最新版本不知道解決沒有。

問題現象是:如果用VS構建之前不添加一個自定義的C++代碼,那麼構建出來的版本會有問題。

解決辦法:在VS構建server版本之前,在UE4 Editor中添加一個C++代碼,這個代碼隨意,只要是C++代碼就行(比如添加一個自定義HUD的class),內容默認,不需要編輯。

添加C++方法是:File -》 Add Code to Project。

由於我這裏演示的是C++工程,所以不需要添加再添加C++ class。

 

 

打包之前記得GameMode和Map是否設置正確了,如果不使用默認的話。


 

 

 4,添加Server.target.cs配置文件

這一步是關鍵步驟。

從官網教學項目ShooterGame中拷貝一個文件:\Epic Games\Launcher\VaultCache\ShooterGame_‘版本號’\data\Source\ShooterGameServer.Target.cs

沒有安裝的話拷貝下面代碼新建一個文本文件,並命名爲MyProjectServer.Target.cs。位置放在\MyProject\Source\目錄下(與其他Target.cs文件同一目錄)。

 

Cpp代碼  收藏代碼
  1. // Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.  
  2.   
  3. using UnrealBuildTool;  
  4. using System.Collections.Generic;  
  5.   
  6. public class ShooterGameServerTarget : TargetRules  
  7. {  
  8.     public ShooterGameServerTarget(TargetInfo Target)  
  9.     {  
  10.         Type = TargetType.Server;  
  11.         bUsesSteam = true;  
  12.     }  
  13.   
  14.     //  
  15.     // TargetRules interface.  
  16.     //  
  17.   
  18.     public override bool GetSupportedPlatforms(ref List<UnrealTargetPlatform> OutPlatforms)  
  19.     {  
  20.         // It is valid for only server platforms  
  21.         return UnrealBuildTool.UnrealBuildTool.GetAllServerPlatforms(ref OutPlatforms, false);  
  22.     }  
  23.   
  24.     public override void SetupBinaries(  
  25.         TargetInfo Target,  
  26.         ref List<UEBuildBinaryConfiguration> OutBuildBinaryConfigurations,  
  27.         ref List<string> OutExtraModuleNames  
  28.         )  
  29.     {  
  30.         OutExtraModuleNames.Add("ShooterGame");  
  31.     }  
  32.     public override List<UnrealTargetPlatform> GUBP_GetPlatforms_MonolithicOnly(UnrealTargetPlatform HostPlatform)  
  33.     {  
  34.         List<UnrealTargetPlatform> Platforms = null;  
  35.   
  36.         switch (HostPlatform)  
  37.         {  
  38.             case UnrealTargetPlatform.Linux:  
  39.                 Platforms = new List<UnrealTargetPlatform> { HostPlatform };  
  40.                 break;  
  41.   
  42.             case UnrealTargetPlatform.Win64:  
  43.                 Platforms = new List<UnrealTargetPlatform> { HostPlatform, UnrealTargetPlatform.Linux };  
  44.                 break;  
  45.   
  46.             default:  
  47.                 Platforms = new List<UnrealTargetPlatform>();  
  48.                 break;  
  49.         }  
  50.   
  51.         return Platforms;  
  52.     }  
  53.   
  54.     public override List<UnrealTargetConfiguration> GUBP_GetConfigs_MonolithicOnly(UnrealTargetPlatform HostPlatform, UnrealTargetPlatform Platform)  
  55.     {  
  56.         return new List<UnrealTargetConfiguration> { UnrealTargetConfiguration.Test };  
  57.     }  
  58.     public override List<GUBPFormalBuild> GUBP_GetConfigsForFormalBuilds_MonolithicOnly(UnrealTargetPlatform HostPlatform)  
  59.     {  
  60.         return new List<GUBPFormalBuild>();  
  61.     }  
  62. }  

 在此基礎上需要修改的地方三個地方:

 

1,類名修改MyProjectServerTarget ;

2,構造方法修改MyProjectServerTarget

3,OutExtraModuleNames.Add("ShooterGame");修改爲OutExtraModuleNames.Add("MyProject");

 

5,構建Server版本

首先,關掉VS,然後右擊工程文件*.uproject-》Generate Visual Studio project files,之所以要重新生成VS工程文件,是因爲要確保上一步添加的Target.cs文件能夠在編譯中生效。

打開VS後,選擇build類型Development Server,然後構建。


 

構建完畢以後,輸出的server.exe文件位置在:/MyProject/Binaries/Win64/MyProjectServer.exe

然後拷貝這個MyProjectServer.exe文件到上面第3步中提到的目錄位置:D:/PackageTest/WindowsNoEditor/MyProject/Binariesk/Win64/目錄下。

此時,該目錄就會同時存在兩個exe文件:MyProject.exe和MyProjectServer.exe。

 

如果MyProjectServer.exe不和MyProject.exe放在一起,則啓動server時會報錯(下面只是其衆多錯誤信息中的一條):

default Property warning and errors:

 

Error: CDO Constructor (WidgetComponent): Failed to find /Engine/EngineMaterials/Widget3DPassThrough_Translucent

 

6,啓動Server

到此爲止,已經從構建UE4服務端這個深坑中爬出來了。。。

命令行啓動:MyProjectServer.exe -log

執行後會看到彈出一個新的CMD窗口,並看到相關打印信息。


 
 

如果是shipping模式編譯的server,啓動時看不到任何信息,也沒有新打開的CMD,但是此時可以在進程列表中看到這個進程。

 

7,client連接server

這一步很簡單,啓動客戶端遊戲後(雙擊打包生成的MyProject.exe或者從UE4 Editor中啓動遊戲均可),按~鍵,輸入:open 127.0.0.1:7777,即可連接上服務端,7777是端口號。

這樣UFUNCTION(Server, Reliable, WithValidation)函數就可以與客戶端獨實現同步了。

注意的是:按~鍵打開遊戲的命令行只對development和debug模式有效,shipping模式無效,另外shipping下也會關閉自帶的同步機制(開頭提到的)。

 

 

其他參考:

Client-Server Model

https://docs.unrealengine.com/latest/INT/Gameplay/Networking/Server/

 

官方文檔v4.4.3:Dedicated Server Guide (Windows & Linux)(必讀)

https://wiki.unrealengine.com/Dedicated_Server_Guide_(Windows_%26_Linux)

 

Networking and Multiplayer

https://docs.unrealengine.com/latest/INT/Gameplay/Networking/index.html

 

Build Standalone Dedicated Server - Unreal Engine 4.7.2(推薦)

https://www.youtube.com/watch?v=3j72KCPUdog

 

Unreal Engine 4 - Setting up a dedicated server on Windows x64 platform 

https://www.youtube.com/watch?v=zSA8zUo8oCg

 

Unreal Engine 4 Dedicated Server Multiplayer Tutorial Unreal Engine Pt1 UE4

https://www.youtube.com/watch?v=BvurHyjI_sY

 

Unreal Engine 4 Dedicated Server Multiplayer Tutorial Unreal Engine Pt2 UE4

https://www.youtube.com/watch?v=c2Ao4esX4UY

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章