UE4_UE5源码编译及发布LinuxServer

UE4/UE5 发布LinuxServer

2023-01-11 更新了UE5.1源码编译以及打包 LinuxServer的内容


:::tip 情景内容

  1. 需要开发专用服务器
  2. 需要将Server发到云端Linux系统主机
  3. 需要关闭SSH,服务一直启用
  4. 需要使用UE4

:::

:::danger UE5.1补充内容

  • 准备UE5.1 源码
  • 准备VS2022
  • 准备Linux交叉编译器-v20版本

:::

1. Visual Studio 2019

1.1 下载 Visual Studio

:::warning

  • UE4编译源码可以使用VS2022,但就此博客发布时间,需要修改配置文件才能正常编译,而2017版本太老了;
  • 后续的C++编写在选用Rider For UnrealEpic商城的二进制版本UE4;
  • 项目写完后,用源码版UE4打包发布;
  • UE5的试过了,很麻烦,问题很多,想想自己是写代码,何必执着于UE5,于是就释然了
  • 电脑安装源码引擎的硬盘空间至少要有200GB
  • 内存至少16GB,最好去网上查下扩展虚拟内存,自动托管到其他磁盘空间较大的磁盘,最好是固态硬盘
  • 编译源码引擎时,确保关闭无关电脑后台,除非报错,否则不操作电脑做其他事,防止虚拟内存不足

:::

  1. 微软只在Visual Stuido主页提供最新版本下载,需要单独去下载 Visual Studio 2019
  2. 下载社区版的就可以了

:::danger VS2022

UE5.1版本及以后的新版本源码要以VS2022来编译,如果使用VS2019

当你运行GenerateProjectFiles.bat时,虽然不会报错,但会提示VS2019不能生成 .NET 6的项目文件,后续在VS2019里面编译源码可能会有warning,也可能会影响到Window打包

如果已经安装VS2019,只需要去Visual Studio Installer里安装一个VS2022即可,具体配置往下继续

:::

1.2 配置 Visual Studio
  • 安装完成后,会进入Visual Studio Installer
  • 已安装内可以看见Visual Studio 2019的安装程序
  • 点击修改
  • 工作负荷内找到游戏,勾选使用C++的游戏开发
  • 此时在右边的安装详细信息内的使用C++的游戏开发的可选项内确保勾选:
    • C++分析工具
    • C++ AddressSanitizer
    • 最新的Window 10 SDK
    • IntelliCode
    • Unreal Engine 安装程序
  • 单个组件内:
    • 默认勾选的C# 和 Visual Basic Roslyn 编译器
    • 搜索勾选MSBuild
  • 最后检查一下是否勾选了最新的Net Framework SDK,该博客勾选的是Net Framework 4.8 SDK
  • 下载安装,安装位置可自定义

:::warning

安装时出现共享组件、工具和SDK的路径不能修改,是因为此前可能已经安装过Visual Studio,需要修改注册表解决问题

解决步骤:

  1. win + r
  2. regedit
  3. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\Setup删除SharedInstallationPath
  4. 重启Visual Studio Installer

:::

:::danger

UE5需要选的东西会更多,但默认先选择和UE4一样的使用C++的游戏开发

这里注意一个细节:进入你的Windows设置 -> 系统 -> Window规格内查看你的操作系统版本

我的是Win11系统,版本号是22621.963

前面UE4里面的WindowsSDK的选项应该改选为Windows11 SDK 22621,找不到对应版本号的也没关系,VS2022会默认选好的Windows11 SDK 20000,这个也能用

至于其他的选项,等正式编译源码的时候,VS2022会提示你还需要安装哪些

:::

1.3 修改解决方案样式

:::tip 可选步骤

  1. 菜单栏内找到工具
  2. 工具->自定义->命令->工具栏->标准->解决方案配置->修改所选内容
  3. 更改宽度:例如200
  4. 若要在生成项目时显示输出窗口,请在选项对话框->项目和解决方案>常规页上,选择在生成开始时显示输出窗口

:::

:::danger

以上VS2022里也适用

:::

1.4 管理员模式启动

:::tip 可能重要

  1. VS安装目录内:\Common7\IDE\devenv.exe
  2. 右键->兼容性疑难解答->疑难解答程序->勾选改程序需要附加权限->测试后下一步->保存设置

:::

:::danger

以上VS2022里也适用

:::

2. 交叉编译器

:::danger

下载交叉编译器,千万别去官方中文虚幻文档,里面给的交叉编译工具链接版本是错的,应该默认进入官方英文的文档网站内下载

博客使用的是UE4.27.2,下载文档内提供的链接,并确保是-v19的版本,如果不是就进错网站了,正确的网站:UE4.27.2 交叉编译

:::

:::danger

UE5.1要用的是**-v20版本,注意先卸载前面的-V19**

网址:UE5.1交叉编译

:::

2.1 安装交叉编译

直接默认安装即可,也可以选择安装路径

cmd验证:%LINUX_MULTIARCH_ROOT%x86_64-unknown-linux-gnu\bin\clang++ -v

无效需手动配置环境变量

2.2 配置环境变量
  1. 进入系统环境变量
  2. 添加:LINUX_MULTIARCH_ROOT
  3. 路径:安装目录\v19_clang-11.0.1-centos7\x86_64-unknown-linux-gnu\bin
  4. -v20安装目录\v20_clang-13.0.1-centos7\x86_64-unknown-linux-gnu\bin

:::warning

交叉编译器安装和配置完成后,需要重启电脑

:::

3. 源码UnrealEngine

:::tip 省略步骤

github账号

加入Epic组织

选择UE4.27.2 Release下载

:::

3.1 配置Setup.bat

Setup.bat配置表:

Usage:
   GitDependencies [options]

Options:
   --all                         Sync all folders
   --include=<X>                 Include binaries in folders called <X>
   --exclude=<X>                 Exclude binaries in folders called <X>
   --prompt                      Prompt before overwriting modified files
   --force                       Always overwrite modified files
   --root=<PATH>                 Set the repository directory to be sync
   --threads=<N>                 Use N threads when downloading new files
   --dry-run                     Print a list of outdated files and exit
   --max-retries                 Override maximum number of retries per file
   --proxy=<user:password@url>   Sets the HTTP proxy address and credentials
   --cache=<PATH>                Specifies a custom path for the download cache
   --cache-size-multiplier=<N>   Cache size as multiplier of current download
   --cache-days=<N>              Number of days to keep entries in the cache
   --no-cache                    Disable caching of downloaded files

Detected settings:
   Excluded folders: Mac, Android, Linux
   Proxy server: none
   Download cache: disabled

Default arguments can be set through the UE4_GITDEPS_ARGS environment variable.
Installing prerequisites...

该博客的配置:(截取的一段,只有**set PROMPT_ARGUMENT=**需要修改)

set PROMPT_ARGUMENT=
for %%P in (%*) do if /I "%%P" == "--prompt" goto no_prompt_argument
for %%P in (%*) do if /I "%%P" == "--force" goto no_prompt_argument
set PROMPT_ARGUMENT=--prompt --threads=20 --cache=E:\UrealEngineSource\UE4.27.2\Cache
:no_prompt_argument
--threads=20 # 加快下载速度,不宜过高
--cache # 将下载的源码文件单独保存到指定位置,方便传给其他人和玩坏了,不用全删了重新下载了
--exclude # 排除不想要的模块

–exclude可选参数:

平台参数:Win32, Win64, osx32,osx64, Linux, Android, IOS, HTML5
VS版本参数:VS2012,VS2013,VS2015
尽量别排除VS版本的参数,平台参数可以排除不要的,该博客默认不加入 --exclude,全要了

:::danger

以上UE5.1也适用,但要注意 --cache=的路径

尽量别用--exclude

:::

3.2 生成UE4.sln文件

上面配置好Setup.bat文件后:

  • 双击运行Setup.bat
  • 双击运行GenerateProjectFiles.bat

:::danger

以上UE5.1也适用

:::

3.3 编译源码编辑器

:::warning

  1. 先编译源码 编辑器
  2. 网上有的教程说的很乱,这里就编译Development Editor即可
  3. 注意:
    • 如果是先完成过了源码引擎的编译,后下载交叉编译,需要按照博客[2. 交叉编译器](#2. 交叉编译器)的内容完成检查步骤
    • 再进行博客3.2 生成UE4.sln文件的步骤,再接着往下继续看,并完成下面的全部步骤

:::

双击UE4.sin文件,根据上面的VS2019配置,此时默认管理员模式

在解决方案中依次选择:

  • Development Editor
  • Win64
  • 选中侧边栏的UE4右键->设为启动项
  • 右键UE4选择生成,注意:不希望看见WarningError,如果有请深入排查问题,然后右键UE4选择重新生成

上面的步骤完成后,不关闭VS2019,建议进行下一步:

  • 依次再重新生成AutomationTool、UnrealBuildTool、UnrealFrontend
  • 如果全部没WarningError,就算编译完成了

:::danger

这里补充一个细节:BuildConfiguration.xml

源码引擎安装目录\UE5.1\Engine\Saved\UnrealBuildTool

C:\Users\用户名\AppData\Roaming\Unreal Engine\UnrealBuildTool

两处都有改:后续可以加快UE5的编译速度可能吧,应该,或许,大概,Maybe

我这里提供我自己用的:

<?xml version="1.0" encoding="utf-8" ?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
 <ParallelExecutor>
    <ProcessorCountMultiplier>2</ProcessorCountMultiplier>
    <MaxProcessorCount>16</MaxProcessorCount>
    <bStopCompilationAfterErrors>true</bStopCompilationAfterErrors>
  </ParallelExecutor>
</Configuration>

具体用法可以去上网查BuildConfiguration.xml

还可以安装一个UnrealVS插件,说是可以快速编译可能吧,应该,或许,大概,Maybe

插件所在的目录:E:\UrealEngineSource\UE5.1\Engine\Extras\UnrealVS

里面有两个选项:VS2019VS2022,具体看你选择

直接双击安装就可以,后面解决方案里找到UE5,右键就可以看到UnrealVS Quick Build

:::

3.4 创建快捷方式

网上有的教程真的傻,非得打开UE4.slnVS2019里面启动源码虚幻引擎

其实可以进如源码引擎目录:\Engine\Binaries\Win64找到UE4Editor.exe

直接双击启动,或者创建快捷方式,放到方便使用的地方启动,和正常的Epic商城引擎没什么两样

:::warning

源码引擎编译完成后,先打开引擎看看打包功能是否出现⚠️标志

如果有,大概率是VS2019交叉编译器没有配置好,缺失SDK,需要重新生成

如果没有,再往后继续看

:::

:::danger

以上UE5.1也适用

:::

4. 打包测试项目

:::danger

以下UE4 / UE5.1也适用,可能吧,应该,或许,大概,Maybe

注意几个可能出现的细节:往往到了这一步,打包LinuxServer不会有什么问题了,但你会发现打包Windows或者WindowsClient并没有打包出来

单独打包Windows或者WindowsClient,会看到类似一下的报错信息:

UATHelper: Packaging (Windows): ERROR: Game target not found. Game target is required with -cook or -cookonthefly

这种错误一般发生在C++项目,解决方法是:StackOverflow

  1. 复制项目名.Target.cs

  2. 粘贴并重命名项目名Game.Target.cs

  3. 修改内容参考如下:

    using UnrealBuildTool;
    using System.Collections.Generic;
    
    public class 项目名GameTarget : TargetRules // 类名改一下
    {
          
          
    	public 项目名GameTarget(TargetInfo Target) : base(Target) // 这里也改一下
    	{
          
          
    		Type = TargetType.Game; // 这里好像默认就是 Game,不用改了
    		DefaultBuildSettings = BuildSettingsVersion.V2;
    
    		ExtraModuleNames.AddRange( new string[] {
          
           "项目名" } );
    	}
    }
    
  4. 删除项目内的BinariesDerivedDataCacheIntermediate

  5. 右键项目名.uprojectGenerate Visual Studio Project Files

  6. 打开项目名.sln,编译项目

  7. 重新打开项目,再次尝试打包Window

:::

4.1 创建测试项目
  1. 打开UE4,是不是源码引擎无所谓,真的
  2. 新建一个C++、第三人称、无初学者内容包、无光追的项目Test
4.2 修改测试项目
  1. 进入ThirdPersonBP找到Map
  2. 依次创建两个新LevelMap_Translation用来服务器过渡用,Map_Start这是游戏客户端默认打开的地图,已经存在的模板地图是客户端玩家进入的服务器地图
  3. 同时创建一个User Widget,随便给个按钮,实现按钮点击事件Open LevelLevel Name参数是:你的云服务器公网IP:7777,后面会说云主机的配置,也可以直接跳到博客5. 云主机防火墙配置,先拿到公网IP
  4. 打开Map_Start,打开关卡蓝图
  5. Begin Play实现:Create WidgetAdd To ViewportGetPlayerController->SetShowMouse->ture
4.3 设置测试项目
  • 打开项目设置:
    • 全局GameMode可以设为none,默认不设也许,完全不影响测试结果
    • 编辑器初始地图:无所谓
    • 游戏默认地图:Map_Start
    • 过渡地图:Map_Translation
    • 服务器地图:第三人称的模板默认地图
  • 在项目设置,打包中搜索list of maps to include in a packaged build:
    • 添加进上面的三个地图
4.4 修改 build.cs

:::warning

注意:测试项目创建用的是不是源码引擎不重要,后面的[4.5 配置打包程序](#4.5 配置打包程序)要用源码引擎打开,具体后面会写

接下来会编译至少两次项目C++源码,目的不是打包,而是测试打包环境是否正常,如果不需要测试,可以直接进入打包环节

假设最终打包结果为:一个Linux Server,一个Windows Client

需要先打开项目文件的**.sln**,解决方案依次是分别编译一下两种配置:

Linux Server包:Development ServerLinux

Windows Client包:DevelopmentWin64,如果Windows Client想打包成发行版,就选择ShippingWin64,该博客选择Development

如果报错,例如:

  1. 交叉编译比需求的版本老了,那就是交叉编译器装错了,顺便查查系统环境变量,再照着博客3.2 生成UE4.sln文件重来
  2. 缺失对应平台的SDK,去博客的[1.2 配置 Visual Studio](#1.2 配置 Visual Studio)重来
  3. 其他的自行上网查询

:::

上面的是警告,需要注意看需求,选择合适解决方案的配置,接下来是打包LinuxServer前的准备工作

首先还算要打开项目目录下的**.sln**文件:

  1. 找到项目目录中的项目名Editor.Target.cs文件

  2. 直接复制这个文件,在同级目录下,再重命名为:项目名Server.Target.cs,打开

  3. 修改内容为:(博客的配置)

    using UnrealBuildTool;
    using System.Collections.Generic;
    
    public class 项目名ServerTarget : TargetRules // 类名改一下
    {
    	public 项目名ServerTarget(TargetInfo Target) : base(Target) // 这里也改一下
    	{
    		Type = TargetType.Server; // 这里的Editor 改为 Server
    		DefaultBuildSettings = BuildSettingsVersion.V2;
    
    		ExtraModuleNames.AddRange( new string[] { "项目名" } );
    	}
    }
    
  4. 分别是public class Test01ServerTargetpublic Test01ServerTarget(TargetInfo Target)Type = TargetType.Server

修改完成后:

  1. 删除项目内的BinariesDerivedDataCacheIntermediate
  2. 右键项目名.uprojectGenerate Visual Studio Project Files
  3. 打开项目名.sln,编译项目
  4. 尝试继续打包LinuxServer
4.5 配置打包程序

首先找到项目目录下的**.uproject文件,右键Select Unreal Engine Version**,选择Soucre build开头的UE4源码引擎

生成一段时间后,双击**.uproject**文件打开源码引擎

配置打包程序:(目的是一次性同时打包出 LinuxServer和windowsClient两个包)

  1. 在引擎主界面的顶部菜单栏中找到窗口->项目启动程序
  2. 添加自定义启动描述文件
  3. 烘培中选择常规,勾选LinuxServerWindowsNoEditor(也可以是WindowsClient)
  4. 烘培语言:随意,一般默认选en
  5. :选择本地打包存储,修改自己的本地目录路径
  6. 部署:选择不部署 (注意:很重要,不然后面打包会卡在Launching UAT)
  7. 返回

点击启动此描述文件,就可以打包了

:::danger

UE5这里好像没有WindowsNoEditor,选Windows或者WindowsClient

如果有问题,可以看[4.1 创建测试项目](#4.1 创建测试项目)上面的danger提示

:::

5. 云主机/ECS

5.1 云服务配置

:::tip 云主机/ECS/轻量应用服务器

随便哪家的云服务都行,系统最好安装Centos7root密码随你,重要的是防火墙的配置:

  1. 添加TCP,端口:7777
  2. 添加UDP,端口:7777

:::

5.2 上传和运行Server

:::warning

博客省略了将文件上传到远端服务器的过程,反正把LinuxServer包压缩**.zip**格式比较简单操作,容易理解

上传的路径最好是普通用户,好像不允许root用户执行,下面会介绍新建一个普通用户unreal,将压缩包上传到unreal家目录,也就是unreal@hostname ~

:::

  1. 先创建一个普通用户

    useradd unreal
    passwd unreal // 输入两次相同的秘密
    cd /home/unreal
    
  2. 把压缩文件上传的当前目录

  3. 安装解压程序

    yum install unzip
    
  4. 解压压缩包

    unzip 压缩包
    
  5. 通过root设置执行权限

    chmod +x 项目名称Server.sh
    
  6. 切换到普通用户unreal

    su unreal
    
  7. 执行

    ./项目名称Server.sh -log
    
  8. 在本地端,打开WindowsNoEditor包的程序进行测试

注意:在Windows本地段关闭远程连接云服务的SSH,正在运行的Server服务会停止

解决方案:nohupscreen

博客采用最简单的nohup

nohup ./项目名称Server.sh -log &

如果想终止这个服务:

su root
ps aux
// 找到 ./项目名称Server.sh -log 这个命令的进程,记住它的pid
kill pid

:::

  1. 先创建一个普通用户

    useradd unreal
    passwd unreal // 输入两次相同的秘密
    cd /home/unreal
    
  2. 把压缩文件上传的当前目录

  3. 安装解压程序

    yum install unzip
    
  4. 解压压缩包

    unzip 压缩包
    
  5. 通过root设置执行权限

    chmod +x 项目名称Server.sh
    
  6. 切换到普通用户unreal

    su unreal
    
  7. 执行

    ./项目名称Server.sh -log
    
  8. 在本地端,打开WindowsNoEditor包的程序进行测试

注意:在Windows本地段关闭远程连接云服务的SSH,正在运行的Server服务会停止

解决方案:nohupscreen

博客采用最简单的nohup

nohup ./项目名称Server.sh -log &

如果想终止这个服务:

su root
ps aux
// 找到 ./项目名称Server.sh -log 这个命令的进程,记住它的pid
kill pid

猜你喜欢

转载自blog.csdn.net/weixin_44519692/article/details/128640031
今日推荐