博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[UE4]如何编译部署独立专用服务端(Standalone Dedicated Server)
阅读量:5057 次
发布时间:2019-06-12

本文共 5959 字,大约阅读时间需要 19 分钟。

这是论坛上对UE服务端功能的回答,意思是UE4提供了网游服务端所具备的特性,包括位移修正、物理碰撞检测。这些特性不是UE4才加入,早期UE版本就有了。

 

UE4自带的同步机制Reliable

这种自带的同步机制(也就是说常说的UFUNCTION(Server, Reliable, WithValidation))的网络通信数据量很大,有点类似moba类游戏的帧同步,适合开房间类型的多人联机游戏,但适不适合MMO类的大规模网络通信,我没测试过,也没看到官方的确切解释,可能看实际项目的同步需求,如果你的服务端不需要物理检测,那么承载肯定可以提升很多。

从v4.4版本开始数个版本,shipping模式关掉了网络同步,据说这只是一个bug,并不是epic有意为之。

如果是要写MMO等通信性能较高的服务端,建议将ACE、libuv、RakNet等高性能网络库加入UE4的C++工程,绕开UE4自身的tcp socket API。

 

=============================================== 

2016-11-20记:感谢网友“”的回答,当前版本的UE4已经可以在shipping模式下打开replication同步机制。一年前的UE4版本确实是在shipping模式下关闭了replication。

===============================================

 

如何编译构建独立专用服务端

下面步骤假设是以development模式来构建,步骤和shipping模式没差异。

 

下面步骤中假设我们自己的UE4工程名叫:MyProject

1,下载源码及编译

需要现在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文件同一目录)。

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
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
OutBuildBinaryConfigurations, 27 ref List
OutExtraModuleNames 28 ) 29 { 30 OutExtraModuleNames.Add("ShooterGame"); 31 } 32 public override List
GUBP_GetPlatforms_MonolithicOnly(UnrealTargetPlatform HostPlatform) 33 { 34 List
Platforms = null; 35 36 switch (HostPlatform) 37 { 38 case UnrealTargetPlatform.Linux: 39 Platforms = new List
{ HostPlatform }; 40 break; 41 42 case UnrealTargetPlatform.Win64: 43 Platforms = new List
{ HostPlatform, UnrealTargetPlatform.Linux }; 44 break; 45 46 default: 47 Platforms = new List
(); 48 break; 49 } 50 51 return Platforms; 52 } 53 54 public override List
GUBP_GetConfigs_MonolithicOnly(UnrealTargetPlatform HostPlatform, UnrealTargetPlatform Platform) 55 { 56 return new List
{ UnrealTargetConfiguration.Test }; 57 } 58 public override List
GUBP_GetConfigsForFormalBuilds_MonolithicOnly(UnrealTargetPlatform HostPlatform) 59 { 60 return new List
(); 61 } 62 }
View Code

 在此基础上需要修改的地方三个地方:

 

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端的Map和GameMode是否设置了,默认是空的,这样编出的服务端,客户端进来时是一片漆黑。。。(但是客户端确实登陆成功)

构建完毕以后,输出的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窗口,并看到相关打印信息。

如果不带-log参数,则不会显示命令行窗口,只有一个后台进程。

7,client连接server

这一步很简单,启动客户端游戏后(双击打包生成的MyProject.exe或者从UE4 Editor中启动游戏均可),按~键,输入:open 127.0.0.1:7777,即可连接上服务端,7777是端口号。如果是shipping模式,是没有这种命令行的,连接服务端需要手动写相关的逻辑代码。

这样UFUNCTION(Server, Reliable, WithValidation)函数就可以与客户端独实现同步了。

注意的是:按~键打开游戏的命令行只对development和debug模式有效,shipping模式无效,另外shipping下也会关闭自带的同步机制(开头提到的)。

 

shipping模式下同步默认可以开启,具体参考 GitHub上pull request.

https://github.com/EpicGames/UnrealEngine/pull/2273 

 

其他参考:

Client-Server Model

 

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

 

Networking and Multiplayer

 

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

 

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

 

Unreal Engine 4 Dedicated Server Multiplayer Tutorial Unreal Engine Pt1 UE4

 

Unreal Engine 4 Dedicated Server Multiplayer Tutorial Unreal Engine Pt2 UE4

11111111

转载于:https://www.cnblogs.com/timy/p/10201818.html

你可能感兴趣的文章
SQL Server 使用作业设置定时任务之一(转载)
查看>>
centos 图形界面和命令行界面切换(转载)
查看>>
Maven启用代理访问
查看>>
Primary definition
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
发送请求时params和data的区别
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>
一步步学习微软InfoPath2010和SP2010--第七章节--从SP列表和业务数据连接接收数据(4)--外部项目选取器和业务数据连接...
查看>>
如何增强你的SharePoint 团队网站首页
查看>>
FZU 1914 Funny Positive Sequence(线性算法)
查看>>
oracle 报错ORA-12514: TNS:listener does not currently know of service requested in connec
查看>>
基于grunt构建的前端集成开发环境
查看>>
MySQL服务读取参数文件my.cnf的规律研究探索
查看>>
java string(转)
查看>>
__all__有趣的属性
查看>>
BZOJ 5180 [Baltic2016]Cities(斯坦纳树)
查看>>
写博客
查看>>
利用循环播放dataurl的视频来防止锁屏:NoSleep.js
查看>>