UE4专用服务器制作步骤

前言

这几天想用UE4做一个游戏项目的demo,但是网上都是些单机游戏、局域网游戏,网络游戏制作的教程少之又少,我看官网说的可以不用写一行代码就能把网络游戏的demo跑起来,但是要根据文档自己搭建服务器。没想到UE4官网的文档抽象得过分,好多细节一笔就带过了,搭的时候踩了不少的坑,现在作者人肉填坑之后将搭建过程心得将之总结,愿后来者不走弯路、少走弯路。

准备工作

在您开始之前,您需要如下准备:

  • 正常使用中的github和gitee账号。
  • 本教程安装的虚幻版本是4.25.3,不同的虚幻版本可能有些按钮和界面不尽相同,请注意到处找找或者网上搜索。
  • 安装好的Visual Studio。vs的各发行版均可,当然您暂时没安装也没关系,下文用到了会指导您进行安装。
  • 一台状态良好的服务器。当然如果您暂时没有个人服务器也没关系,您可以安装在自己电脑上,也可以使用虚拟机,或者是在局域网中寻找一台主机作为服务器。不管是Linux还是Windows,都可以作为服务器,内存不会占用太多,请放心使用。
  • 准备好至少200G的磁盘存储空间。
  • 预计可以在3天内完成。

其他

如果是老玩家的话可以不用看这么仔细,直接到gitee上选择从github上导入,然后再从gitee上clone或者下载zip包(建议直接下载)就可以跳过Step1。

本篇教程下载的虚幻源码版本是4.25.3,且所有步骤都经过实测,请放心食用。

不知道大家喜欢什么写作风格,是偏官方还是偏沙雕,如果对本教程有建议、遇到问题或者批评指正也欢迎评论交流,原创不易,如需转载请注明出处~

下面所有的图片可以点击查看大图,滚动鼠标会自动关闭图片。

Step 1 下载Unreal引擎源码

关联账户

打开页面,将Unreal Engine账户与Github账户相关联,此页面有步骤指示。网页链接

先进链接并登录账号
先登录epic账户,然后点关联账户
在epic授权界面给github授权
授权完成

打开github的unreal网站:网页链接,登录github账号,然后会出现一个下面的提示,点击加入:

加入协作
点击加入

坑1:点击加入的时候就能看见引擎了,在加入的之前是看不到的,现在我们进去遛一遛。

unreal源码

下载引擎源码

提示:此节文字较多,请仔细阅读。

坑2:这个时候进去不要直接下载zip或者用git clone或者github Desktop,这样是下载不下来的,因为github被限制了域名,下载速度十分感人,只有几十KB/s。

坑3:这时候聪明的同学可能就想到了,那我不从这里下载,我买个小飞机总快了吧?答案:这个方法我没试过,因为在这之前我找到了更好的解决方法。并且小飞机不要钱么(想在究极白嫖怪面前谈钱?

坑4:你历经千辛万苦,最开始按照网上的方法改了hosts刷新了dns缓存,但是你发现这并没有什么屌用,后面终于找到了一个名为github加速的插件,git clone终于能到了MB/s的速度了。

坑5:下到一半的时候你又发现git工作突然断了还报了错,然后你前几次又重试,重试了几次发现了同样的问题,然后又历经千辛万苦找到帖子发现原来是超过了git的缓存区大小,git原地嗝屁,你又把git的缓存区大小改到最大,但是发现还是无济于事,该崩还得崩。

然后你又想那我不去github上面下总行了吧,中文互联网肯定有人已经早就下好了啊。OK,然后你又到unreal的社区去逛、去B站逛、去百度云逛、去CSDN逛、去Google逛,发现这些文件不是让你去github下就是版本低,有的下下来Windows还报毒…

但又有聪明的同学又想到了,那我去gitee看看吧,但是你又遗憾的回来了:unreal版本太低了,并且在2年前就停止了维护。

事情到这里似乎就无解了, github直接下载zip又慢、git clone又要缓存溢出、各大平台和某度云和gitee又没有其他大神搞到的源代码,昨天我下的时候差点直接给我物理劝退。

但是事情还有转机。

答案是:gitee上面是可以从github上面导入仓库的,然后又从gitee上面下代码。并且作者就是这样白嫖了gitee的服务器资源(那个引擎是真的大

废话不多说直接开搞~

unreal的文档上说先fork到自己的仓库,然后在git clone或下载zip包。这一点在github的unreal文档上能看到:

fork到自己仓库~

那么我们就去fork一下吧。

把unreal源代码fork到自己的仓库
不要点下面那个了,那个是组织- –

这个网页先不关,然后新开一个标签页到gitee上并登录。点那个+号然后再从下拉列表选择从github上导入。

选择从github上导入

填好信息:github的仓库地址和github的账号密码。

填好信息

回到你的github标签页,找到你刚刚fork的仓库,把git clone的地址复制下来填到gitee上面的第一个框框。格式是:https://github.com/用户名/仓库名.git。

点击复制git的url

信息填好之后拉到最下面点导入。这个过程比较花时间,因为引擎代码是真的大,请耐心等待,估计二十分钟以内。(建议开一把娱乐

gitee处理~

终于等到你,还好我没放弃~

导入成功~

到了这一步相信很多同学都已经会做了,要么下载zip包要么git clone,我个人推荐的方式是下载zip包,速度杠杠的还不会担心git缓存溢出。

这里我们选择下载zip包

坑6:这个时候有可能会提示你你的仓库以及被屏蔽,因为文件太大了,让你不要滥用仓库,但是不要怕,你就点那个按钮“ 我已经了解屏蔽原因,确认解除屏蔽并尽快处理仓库瘦身”。(但其实我并不会对代码瘦身,下好了我就没管了

解除屏蔽以后再点下载,这时候耐心等待一下。

坑7:这个时候可能会显示打包失败,多换个时间试一试就行了(隔十分钟就差不多可以下载了)。

坑8:不管是下载zip包还是clone,都请把它放在一个盘的根目录,因为如果你不这样做的话后面安装第一个依赖到最后一点的时候会报 PathTooLongException 的错误:

PathTooLongException

或者是在不行你就git clone,瞅瞅网速是不是快多了(我这里网不好,比较慢)。

500+kb/s

现成源码

如果你实在是尽力了也搞不下来的话,可以用我提供的链接下载。

下载地址:百度云 密码:aafh

链接挂了记得联系我补上。

(u1s1 gitee的压缩算法是真的狠啊,1.5G的玩意儿硬生生压成了300M。

Step2 下载Visual Studio 2019并添加工作负载

安装Visual Studio 2019

到vs官网下载Visual Studio 2019,这里我们下载社区版就足够了,unreal引擎支持vs的所有发行版编译,当然要是你资金充裕或者企业确实需要那么你可以下载专业版或企业版~

下载社区版

安装过程就不说了,就是选你要安的空间安装就完事了。重点说一下在vs里面需要的工作负载。

安装工作负载

下面我们打开Visual Studio Installer开始选择负载安装~

要是你以前后vs的也不用急,跟着下面点就能把Visual Studio Installer打开:

打开它

坑9:如果你是第一次安装,那么就请在第一次的时候就选择好存储位置,因为IDE和SDK啊这些东西相当大。

妥善选择安装位置
选择安装负载

安装位置选择好以后就可以开始安装了,这一步等的时间比较久。(建议开一把娱乐

Step3 为Unreal安装依赖和生成VS文件

注意:请严格按照顺序安装依赖,先安装依赖,安装完毕没有报错之后再生成VS文件。此步骤需要的时间较长,且需要联网,建议时间充足时进行。如是笔记本,则建议将电脑进行如下设置,避免电脑睡眠导致其他情况发生。

设置电脑电池

安装依赖

如果你以上步骤都做完了,那么你就可以开始为Unreal安装依赖了,打开你下好的源代码目录,双击setup.bat开始检查和更新UE4引擎的依赖组件 。

打开源代码
安装依赖

注意:请不要关闭此黑框,让它自己安装,安装时间受网络环境限制,安装完成之后如果不报错会自动退出。

坑8:报错: PathTooLongException 。解决办法:请把源文件放在一个盘的根目录以缩短路径长度。

PathTooLongException

这是来自于C#中System.IO中的一个异常,详情请见:网页链接

错误详情

生成VS文件

如果安装第一个依赖一切顺利的话你就可以开始生成VS文件了~

打开源代码目录,双击 “GenerateProjectFiles.bat”以开始生成。

安装第二个依赖

同样的,请不要关闭窗体,等它自己完成退出~

坑10:“Framework,Version=v4.6.2”引用错误,请参考Step2的最后一步安装.Net Framework 4.6开发工具以解决。

注意:请不要安装4.8或者更新版本,因为这是版本要求。

“Framework,Version=v4.6.2”引用错误

啊?你问我它完成有什么不一样啊?你猜猜他干了些什么(滑稽

安装依赖前后对比

如果这些你都完成了,那么就离自己的游戏专用服务器就不远了~

提示:到了这一步完毕以后您可以将此文件夹备份,下次要是因为不可抗力等原因丢失工作进度,这起码等在很大程度上节约您的时间。备份以后只需在使用前再重复Step3,但是放心,因为大部分已经安装好了,所以这次只会更新少部分的文件,速度很快。

备份使用之前再检查安装依赖

Step4 编译引擎

编译建议在电脑空闲时编译。编译需要花费很久的时间,并且在编译时vs会吃完所有的CPU资源,电脑的配置差异时间有所不同,作者的电脑(i5-7300HQ,四核心)实测编译需要5个小时左右。

对Linux的编译支持-Linux交叉编译

官方建议是在Windows里面使用linux的交叉编译以对linux平台进行支持,但是如果你愿意也可以使用linux系统进行编译,效果相同。

注意:如果您要在Linux上运行服务端(即LinuxServer),那么请到官网下载虚幻对Linux的编译支持,官网文档里有指引。

下载对应版本

下载好了以后安装。

安装完成

配置好环境变量。

配置环境变量

配置好环境变量以后重启机器,打开CMD,输入指令:

%LINUX_MULTIARCH_ROOT%x86_64-unknown-linux-gnu\bin\clang++ -v

回车以后如果是出现以下内容即为成功。

成功配置环境变量

开始编译引擎

注意:如果你是已经编译过UE4,那么配置完成后你可以按照如下编译步骤,先编译programs,如果不行再编译ue4,programs编译的时间比ue4短。

先重新编译这个
如果不行再编译这个

这里我们是直接编译,所以先用VS打开工程文件。

打开工程

选择Debuggame editor或者Development editor。

选择Build方式

编译~

开始编译

编译完成后,在此路径下面找到一个名为UE4Editor.exe的可执行文件,请将此快捷方式发送到桌面,后面还会多次使用到。

找到UE4Editor.exe

Step5 打包为服务器

注意:在打开之前请退出已打开的UE4,最好是重启电脑。

打开UE4Editor

如果你的电脑在打开UE4Editor45%的时候卡住了,那么请耐心等待,它只是在编译shader而已,45%是编shader的经典位置之一。不信你就打开任务管理器看看是不是ShaderCompileWorker在跑,并且只会第一次跑的时候打开慢,后面就会变快了。

打开UE4Editor

打开项目

找到你的UE4项目,用切换引擎。

切换引擎版本
注意检查引擎路径正确与否

选择完版本以后双击你的*.project打开即可。

将蓝图工程转换为C++工程

如果是蓝图工程则需要先转换为C++工程才能进行打包,请按照遵循操作即可轻松转换 ,如果您的工程已经是C++工程则无需转换,可跳过此步 。

新建C++类

这一步随便选个类。

选择一个类

给类取名。

取名

点击“创建类”,unreal会自动帮我们编译新建的C++代码。

unreal编译代码

编译完成之后会自动调起电脑里面的vs打开工程。

自动打开VS

然后您也可以看到您的项目里面多出了几个文件夹。

蓝图工程
转换为C++工程

修改类文件

到此路径下复制你的“项目名Editor.Target.cs”文件并改名为“项目名Server.Target.cs”。

复制一个Server出来

用文本编辑器或者VS打开项目修改代码,将一下三处的“Editor”改为“Server”。

修改文件

然后返回unreal刷新工程。

刷新工程

刷新以后VS也能立即知道文件改变,根据提示重载工程即可。

重载工程

如果您能在工程里面看到“项目名Server.Target.cs”则说明成功。

修改服务器默认地图

服务器默认地图为空,如果不修改则进去以后可能会是黑的。

例如我想让这张地图作为服务器地图。

服务器地图

开始设置。

打开项目设置
修改服务器地图
打包地图

打包为服务器

打包为WindowsServer

我们需要在“窗口”中选择“项目启动程序”以开始打包服务器。

Projectlauncher
项目设置

项目设置好之后即可开始打包。同样的,这一步也是相当费时间,需要耐心等待。在这之前你可以先看下一步开放服务器端口。

服务器打包完成之后你可以在如下你的工程路径下找到Server,这就是你的服务器。

Server

打包为LinuxServer

若是需要打包为LinuxServer,则需要到官网下载Linux的交叉编译并安装,详情请见Step4。

准备linux环境

除了Linux的交叉编译以外,还需要linux的环境,可以使用虚拟机(记得与主机联网),也可以直接在Windows里面使用 linux子系统,两者效果相同,我们可以在win的应用商店里面找到他们。

打开应用商店并搜索wls( Windows Subsystem for Linux )。

选择linux子系统

我们这里使用子系统。如果你第一次启动子系统报出如下错误,那么说明你还没有在Windows上开启对子系统的支持。

暂未开启支持

转到控制面板-程序和功能-启用或关闭Windows功能,把子系统打钩。

开启子系统支持

点击确定以后Windows会自动安装所需组件,安装完毕以后重启即可。

重启Windows

重启以后即可成功进入子系统。这里第一次进去要创建用户名和密码,请牢记,后面打包会用到。

成功进入子系统

先更新一波系统和软件,先执行:

sudo apt update

再执行:

sudo apt upgrade

再安装openssh的sever:

sudo apt install openssh-server

再开启服务:

sudo service ssh start

完成以后这个子系统不要关。

开始打包

现在我们回到虚幻开始打包,同样的先进入项目启动器。

此图像的alt属性为空;文件名为VTBCF6WMY2FPCFLUORF.png
ProjectLauncher

这次需要先添加一个linuxserver再开始打包。

设备管理器
添加一个设备
选择平台

注意:如果你没有安装对linux的交叉编译支持并添加linux的工作负载( 详见Step3和Step5 )的话是没有linux的相关选项的 ,像这样:

没有linux平台

现在我们选择LinusServer并配置一下:

配置平台信息

这里可以看到LinuxServer好像不可用:

不可用

我们还是使用高级设置设置一下即可。

和Windows设置相同

设置完毕以后启动。同样的,耐心等待。

编译完成

编译完成后,你能在如下目录找到服务器LinuxServer:D:\ShottingGameDemo01\Saved\StagedBuilds\LinuxServer\ShottingGameDemo01\Binaries\Linux

LinuxServer

Step6 调试并验证服务器

服务器已经打包好了,直接运行即可,调试主要是开下端口、看下log啊这些。

开放服务器端口

注意,开放端口之前请先检查一下端口是否被占用,然后再开放端口,防止端口冲突。

Windows开放端口

按照如下步骤即可开放Windows端口。

打开控制面板
选择Windows防火墙
点击高级设置
点击入站规则
新建入站规则

规则使用TCP或UDP均可,个人推荐使用TCP。

注意:unreal的端口默认是从7777开始的。也就是说如果你有多个Server同时工作,则需要开放多个端口。例如:Server1需要开放7777端口,Server2需要开放7778端口。

选择UDP
允许连接
这几个全选
填好信息

注意:这一步很重要,一定给你的服务器起一个标准化的名字,如果以后时间久了你忘记了那么会很麻烦。推荐以下起名规则:

  • 名称:UE版本号Server_项目名。
  • 项目描述:按需填写即可。

当然,这只是我的推荐而已,要是你不想用我的推荐也可以,只是你一定要起一个名儿,方便你一看到名儿就知道是拿来干什么的,遗忘了的话会很麻烦。

Linux开放端口

Linux开放端口网上一搜一大把,但为了读者方便我还是提一下,本方法来自博客园,根据需要任选其一即可:

开放Linux端口

将服务端上传到服务器

上传到Windows服务器

如果您要上传到服务器的话需要将此文件夹上传。

上传此文件夹

上传到Linux服务器

同样的,需要上传如下目录到Linux服务器。

上传此文件夹

注意:Unreal不让我们以root身份运行,这是为了安全起见,详情见:网页链接

不要以root运行

解决方案:建立一个专用账户(普通账户)来运行。

运行服务器

Windows运行服务端

由于服务器是一个黑框,所以我们需要到cmd中运行他,并且我们需要查看他的运行状态,所以需要加log以查看日志。

先创建一个快捷方式
对快捷方式右键“属性”

将快捷方式移动到我们想要的地方,然后双击运行快捷方式即可。

运行服务端

Linux运行服务端

连接上您的linux,这里我们还是使用Windows的子系统Debin来演示。

先进入到LinuxServer的目录,注意:Linux路径符与Windows正好相反。

cd mnt/D/workspace/Unreal_UE4 workspace/ShottingGameDemo01/Saved/StagedBuilds/LinuxServer/ShottingGameDemo01/Binaries/Linux

然后运行服务器。

./ShottingGameDemo01Server
运行服务器

同样的,注意看日志给我们的信息,例如端口是多少:

注意端口

验证服务器

接下来验证一下服务器, 先把Windows或Linux端的服务器跑起来,看看是不是能达到预期效果。

Windows验证服务器

还记得么,我们选的默认服务器地图是下面这张。

服务器地图

我们新建一张地图,客户端是新地图,然后连接到服务器,若是能跳转到服务器默认地图则为成功。

新建关卡
这里选一个默认的地图
启动游戏
控制玩家

在键盘下按下“~”以呼出命令界面,并输入“open 127.0.0.1”。前面已经说了,unreal的端口是从7777开始的,我这个是第一个服务器,所以只需要输入open 127.0.0.1,默认端口是7777,即open 127.0.0.1 = open 127.0.0.1:7777。如果你有多个服务端在同一台服务器上面运行,则需要根据log日志放行相应端口,参考Step6。

执行命令

回车以后便可以连接服务器,跳转到服务器地图,还能看到另一个小人~

成功连接服务器

到这里你已经成功搭建了一个自己的服务器!

现在我们来看看服务器端有没有什么变化,log里面打印了什么东西。

日志打印

Linux验证服务器

验证服务器的步骤也一样,我们先打开此地图并键入命令

打开初始地图并键入命令
验证成功

查看日志,跟Windows打印的一样。

成功

附加 打包为客户端

打包为Win64

项目设置

打开项目设置
设置1
设置2

开始打包

选择win64
选择一个保存位置
查看输出日志

打开目标文件夹,里面的一个可执行文件就是客户端。

打包为Linux

待更新~

打包为H5

待更新~

写在最后

此教程并非作者一个人完成,也先后寻求好友帮助,在网上看了不少帖子,最终用时一周爬出此深坑,在此记录,以示感谢。

参考文献

此教程参考了:

  • https://zhuanlan.zhihu.com/p/30068743
  • https://programtip.com/zh/art-64456
  • https://www.bbsmax.com/A/MAzAPkjod9/
  • https://zhuanlan.zhihu.com/p/29788315
  • https://www.bilibili.com/video/BV1bW411C7Lt?from=search&seid=7327606574918392161
  • https://www.bilibili.com/video/BV1E54y1U7WE?from=search&seid=7327606574918392161
  • https://www.bilibili.com/video/BV1xs41117Px?from=search&seid=9826824285593663358
  • https://www.unrealircd.org/docs/Do_not_run_as_root
  • https://space.bilibili.com/486287787/dynamic

作者

作者:@sin998

友人帮助:@lyp、@demo

发表评论

电子邮件地址不会被公开。 必填项已用*标注