原文作者:@玄冬Wong
转载请注明原文出处:http://aigo.iteye.com/blog/2268777
这是论坛上对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记:感谢网友“molixiaogemao”的回答,当前版本的UE4已经可以在shipping模式下打开replication同步机制。一年前的UE4版本确实是在shipping模式下关闭了replication。
===============================================
如何编译构建独立专用服务端
下面步骤假设是以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文件同一目录)。
// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved. using UnrealBuildTool; using System.Collections.Generic; public class ShooterGameServerTarget : TargetRules { public ShooterGameServerTarget(TargetInfo Target) { Type = TargetType.Server; bUsesSteam = true; } // // TargetRules interface. // public override bool GetSupportedPlatforms(ref List<UnrealTargetPlatform> OutPlatforms) { // It is valid for only server platforms return UnrealBuildTool.UnrealBuildTool.GetAllServerPlatforms(ref OutPlatforms, false); } public override void SetupBinaries( TargetInfo Target, ref List<UEBuildBinaryConfiguration> OutBuildBinaryConfigurations, ref List<string> OutExtraModuleNames ) { OutExtraModuleNames.Add("ShooterGame"); } public override List<UnrealTargetPlatform> GUBP_GetPlatforms_MonolithicOnly(UnrealTargetPlatform HostPlatform) { List<UnrealTargetPlatform> Platforms = null; switch (HostPlatform) { case UnrealTargetPlatform.Linux: Platforms = new List<UnrealTargetPlatform> { HostPlatform }; break; case UnrealTargetPlatform.Win64: Platforms = new List<UnrealTargetPlatform> { HostPlatform, UnrealTargetPlatform.Linux }; break; default: Platforms = new List<UnrealTargetPlatform>(); break; } return Platforms; } public override List<UnrealTargetConfiguration> GUBP_GetConfigs_MonolithicOnly(UnrealTargetPlatform HostPlatform, UnrealTargetPlatform Platform) { return new List<UnrealTargetConfiguration> { UnrealTargetConfiguration.Test }; } public override List<GUBPFormalBuild> GUBP_GetConfigsForFormalBuilds_MonolithicOnly(UnrealTargetPlatform HostPlatform) { return new List<GUBPFormalBuild>(); } }在此基础上需要修改的地方三个地方:
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下也会关闭自带的同步机制(开头提到的)。
其他参考:
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
相关推荐
独立部署模式standalone下spark配置,从乌班图到jak,scala,hadoop,spark的安装 部署
mule standalone server 3
selenium-server-standalone-2.40.0.jar 、selenium-java-2.40.0-srcs.jar 、selenium-java-2.40.0.jar
从上文可以看出,Selenium Server是一个独立的中间服务器(确切地说是代理服务器),它可以架设在其他机器上!所以测试案例通过发送HTTP请求去控制Selenium Server是很正常的。 (2).Selenium Server的Launcher启动...
selenium-server-standalone-2.44.0, selenium最新服务器,
flink 独立集群部署的dockerfile、dockercompose文件
selenium-server-standalone-2.7.0.jar,适用于网络爬虫的jar包,非常好用
selenium3.9.0-server-standalone.jar文件,需要的赶紧下载了
ehcache-standalone-server-1.0.0-distribution.tar.gz 01
selenium-server-standalone-3.9.1.jar,python插件,用于web自动化测试
mule standalone server 1
selenium-server-standalone-3.141.59.jar
最新版selenium-java,selenium-server-standalone-3.141.0.jar
mule standalone server 2
selenium-server-standalone-3.6.0.jar selenium-server-standalone-3.6.0.jar
java+selenium实现web自动化测试需要用到的jar包。不过某些情况下Selenium-server-standalone包即可,Selenium-java没有使用也可以运行
selenium-server-standalone-3.7 selenium-server-standalone-3.7
selenium-server-standalone-3.5.2
Selenium Standalone Server3.141.59 The Selenium Server is needed in order to run Remote Selenium WebDriver. Selenium 3.X is no longer capable of running Selenium RC directly, rather it does it through...
selenium-server-standalone-3.141.59.jar selenium-server-standalone-3.141.59.jar