原文作者:@玄冬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文件同一目录)。

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

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

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

如何创建独立的UE4服务端的更多相关文章

  1. 【转】SoapUI5.0创建WebService接口模拟服务端

    原文:http://blog.csdn.net/a19881029/article/details/26348627 使用SoapUI创建WebService接口模拟服务端需要接口描述文件 MathU ...

  2. SoapUI5.0创建WebService接口模拟服务端(转)

    转载自:https://blog.csdn.net/a19881029/article/details/26348627 使用SoapUI创建WebService接口模拟服务端需要接口描述文件 Mat ...

  3. 【JMeter4.0学习(三)】之SoapUI创建WebService接口模拟服务端以及JMeter对SOAP协议性能测试脚本开发

    目录: 创建WebService接口模拟服务端 下载SoapUI 新建MathUtil.wsdl文件 创建一个SOAP项目 接口模拟服务端配置以及启动 JMeter对SOAP协议性能测试脚本开发 [阐 ...

  4. day114:MoFang:基于支付宝沙箱测试环境完成创建充值订单接口&服务端处理支付结果的同步通知和异步通知

    目录 1.基于支付宝提供的沙箱测试环境开发支付接口 1.后端提供创建充值订单接口 2.前端调用AlipayPlus发起支付 3.注意:自定义APPLoader完成接下来的开发 4.下载支付宝沙箱钱包A ...

  5. Axis创建webservice客户端和服务端

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui0317/ ...

  6. CXF创建webservice客户端和服务端

    转 一.CXF的介绍 Apache CXF是一个开源的WebService框架,CXF大大简化了Webservice的创建,同时它继承了XFire的传统,一样可以和spring天然的进行无缝的集成.C ...

  7. 13.Axis创建webservice客户端和服务端

    转自:https://blog.csdn.net/chenghui0317/article/details/9318317 一.Axis的介绍 Web Service是现在最适合实现SOA的技术,而A ...

  8. 基于CFSSL工具创建CA证书,服务端证书,客户端证书

    背景描述 在局域网中部署组件时,想要通过证书来实现身份的认证,确保通信的安全性,可以通过cfssl工具来进行CA证书,服务端证书,客户端证书的创建. 目录 背景描述 部署cfssl工具 下载,上传cf ...

  9. [UE4]如何编译部署独立专用服务端(Standalone Dedicated Server)

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

随机推荐

  1. <section> 标签

    最近正在学习html5,刚接触html5,感觉有点不适应,因为有一些标签改变了,特别是div, section article这三个标签,查了一些资料,也试着用html5和css3布局网页,稍微有点头 ...

  2. Python购物车程序

    1.要求用户输入工资,然后打印购物菜单 2.用户可以不断的购买商品,直到钱不够为止 3.退出时格式化打印用户已购买的商品和剩余金额 salary = int(input("请输入你的工资:& ...

  3. 求两圆相交部分面积(C++)

    已知两圆圆心坐标和半径,求相交部分面积: #include <iostream> using namespace std; #include<cmath> #include&l ...

  4. JS利用取余实现toggle多函数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. offsetParent的解释

    offsetParent是个只读属性,返回最近显示指定位置的容器元素的父级.如果元素没有指定位置,最近的元素或者根元素(标准模式下是html,怪异模式下是body)就是offsetParent off ...

  6. NIO及Reactor模式

    关于Nio Java NIO即Java Non-blocking IO(Java非阻塞I/O),是Jdk1.4之后增加的一套操作I/O工具包,又被叫做Java New IO. Nio要去解决的问题 N ...

  7. Python之Web框架

    Python之Web框架: 一.  Web框架的本质: 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env pyth ...

  8. c/c++ 缓冲区的刷新

    利用string 对象查看缓冲区的变化,因为每个string对象在输入时会以空格作为分界. #include<iostream> #include<string> using ...

  9. Bing Test -必应每日壁纸自动换

    今天向大家推荐一个桌面美化类的工具,没错就是自动更换壁纸,而且是精美的必应每日壁纸哦!绿色小巧,开机自启动,设置后每日自动更新你的桌面~ 软件名称:Bing Test 链接: http://pan.b ...

  10. 【Juicer】 一个高效、轻量的前端 (Javascript) 模板引擎

    引用地址:http://juicer.name/docs/docs_zh_cn.html * 一个完整的例子 HTML 代码: <script id="tpl" type=& ...