[UE4]如何編譯部署獨立專用服務端(Standalone Dedicated Server)

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

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

1,下載源碼及編譯

需要現在unrealengine官網上註冊並加入github開發組才有許可權進入下面地址。

github.com/EpicGames/Un

注意:編譯專用伺服器,只能用源碼編譯版本的引擎,安裝版本的引擎無法編譯Server。

打開頁面後下載一個最新的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 GamesLauncherVaultCacheShooterGame_『版本號』dataSourceShooterGameServer.Target.cs

沒有安裝的話,新建一個文本文件,並命名為MyProjectServer.Target.cs,複製粘貼以下代碼,並將代碼文件放在MyProjectSource目錄下(與其他Target.cs文件同一目錄):

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. using UnrealBuildTool;using System.Collections.Generic;[SupportedPlatforms(UnrealPlatformClass.Server)]public class ShooterGameServerTarget : TargetRules{ public ShooterGameServerTarget(TargetInfo Target) : base(Target) { Type = TargetType.Server; bUsesSteam = true; ExtraModuleNames.Add("ShooterGame"); }}

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

  • 1,類名修改MyProjectServerTarget ;
  • 2,構造方法修改MyProjectServerTarget;
  • 3,ExtraModuleNames.Add(「ShooterGame」);修改為:ExtraModuleNames.Add(「MyProject」);

注意:這段代碼是4.16及以後的版本,4.16之前的版本用上面代碼無法編譯。

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.exeMyProjectServer.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窗口,並看到相關列印信息。

如果不帶-log參數,則不會顯示命令行窗口,只有一個後台進程。

7,client連接server

這一步很簡單,啟動客戶端遊戲後(雙擊打包生成的MyProject.exe或者從UE4 Editor中啟動遊戲均可),按~鍵,輸入:open 127.0.0.1:7777,即可連接上服務端,7777是埠號。如果是shipping模式,是沒有這種命令行的,連接服務端需要手動寫相關的邏輯代碼。

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

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

常見問題

如果出現以下錯誤提示,原因是客戶端和服務端版本不匹配,比如編譯完客戶端之後又改過代碼,然後再編譯服務端。

LogNet: NotifyControlMessage: Client connecting with invalid version. LocalNetworkVersion: -629807355, RemoteNetworkVersion: 1642249361

推薦閱讀:

「2018 Unreal Open Day 虛幻引擎技術開放日」活動開啟預售
真良心大廠EPIC,頁游廣告又有新素材了!
[UE4]資源非同步載入(Assets Asynchronous Loading)與內存釋放(Free Memory)
steam發布篇---2
解讀GDC三個Unreal作品,照片級真實感,實時圖形渲染,塑造下一代遊戲和電影

TAG:虛幻4遊戲引擎 | 虛幻引擎 | UnrealEngine4 |