前言
这篇文章主要是记录一些毕业设计用到的一些东西和踩的坑。
1.Dedicated Server
1.1 打包
笔主用的UE5.3.2源码编译版,我的项目名称叫做GraduationProject。Dedicated Server打包需要先创建一个目标文件XXXServer.Target.cs,XXX为项目名称。文件直接复制UE已经生成好的XXXEditor.Target.cs即可。
然后进入XXXServer.Target.cs进行一点修改,将所有Editor修改为Server。
接着重新生成项目文件,进入项目文件进行编译。将Target改为Server(笔主用的Rider,VS一样),然后进行编译。
编译完成之后,启动项目进行打包。勾选GraduationProjectServer进行服务器打包
打包完成之后,按住Alt拖动exe文件创建快捷方式,右键快捷方式在目标后面添加" -log"(注意有空格)。点击快捷方式即可启动服务器包。(ps:默认服务器包是没有窗口的)
1.2 Client连接Server
打开Project Settings Map&Modes。启动游戏打包的项目后,Client会进入红色框的地图,Server会进入黄色框的地图。
要想让Client连接Server,需要写一点逻辑。打开ClientMap的关卡蓝图,使用open level蓝图节点。
127.0.0.1是本机的IP,7777是默认端口。若想连其它主机的服务器,将IP更改即可。
1.3 地图切换
当所有Client连接到Server后,Server可书写逻辑进行地图切换,将所有连接的Client跳转到某个地图。具体方法是调用ServerTravel函数。
GetWorld()->UWorld::ServerTravel(FString("/Game/ThirdPerson/Maps/ThirdPersonMap"));
ServerTravel切换地图可能会导致NavMesh构建的寻路数据异常,猜测在关卡流送时,NavMesh先被流送,StaicMesh还不存在,构建的寻路数据无效。待StaicMesh流送时,因为NavMesh的更新方式默认为Static,所以寻路数据不会被更新,使得AI不能移动。最简单的解决方式就是将NavMesh的更新策略改为Dynamic,但此方法会导致性能损耗严重。
1.4地图打包问题
UE不会将所有Map进行打包,所以需要做一些额外操作,否则地图切换可能会失败。在ProjectSettings-Packagin中添加如下配置项
2.ini文件打包后修改
打包后可修改DefaultGame.ini(其它ini文件也行,但是都是修改DefaultGame.ini内容)文件内容,首先在DefaultGame.ini文件内写入
[Staging]
+BlackliskConfigFiles = GraduationProject/Config/DefaultGame.ini
然后在GraduationProject.Build.cs文件中添加
RuntimeDependencies.Add(Path.Combine(ModuleDirectory, "../../Config", "DefaultGame.ini"));
打包后即可在Config找到DefaultGame.ini文件
3.Mysql数据库
用的这个大佬的插件Unreal_MySQL_Plugin
4.GAS-GC特效问题
GA、GE触发GC都是通过Tag的方式,Tag并不能作为引用链索引到GC使用的资产,导致GC使用的资产不会进包。有很多方式可以解决此问题,笔主采用的方法为新建一个BP_GCReferencr的actor,将此Actor放到游戏场景中。在此Actor中新建变量引用所有GC,然后加载。