这部分内容真的踩了好多坑,花费了好多时间,在此做个复盘避免几个月后又全忘了...
1. UE4局域网内多人驾驶实现
ue4有两种联机方式,一种是局域网联机,另外一种是外网联机,需要有独立的服务器。但是无论是何种联机方式,都是只有一个服务器端,区别在于局域网联机中客户端和服务器端都同在CreateSession那台机器上,其他joinSessiion的为客户端,独立服务器的顾名思义客户端和服务器端是相互独立的。由于本文目的是操作复盘,所以有关UE4网络连接的知识不多赘述,官方文档有详细的介绍,多人联机原理也可以参考虚幻引擎4多人联机基础知识
1.1 简易界面实现
先编写一个简易的widget类型UI界面,作为实验进入的首页。
各个按钮对应的点击逻辑如图:
1.2 Config添加配置项
要开启联网功能,还需要在工程项目目录下的Config/DefaultEngine.ini文件添加如下配置项,修改完之后要重启UE4才能生效。
[OnlineSubsystem]
DefaultPlatformService=Null
1.3 局域网防火墙关闭
关闭局域网对应的网络防火墙,否则无法与局域网内其它主机建立连接。
1.4 配置硬件轴属性映射
可以参考之前的文章UE4集成罗技G29 需要注意的有几点:
- 轴属性是与硬件设备相对应的,轴映射是与蓝图或C++中软件自定义的行为相对应的,我们要做的就是将
硬件的轴属性匹配到软件对应的轴映射中; - 不同硬件的轴属性映射需要做不同的配置,例如G27和G29是不同的,需要分别在项目设置中配置"RawInput"和"Input",以及对应的"Vendor ID","Product ID";
- 如果电脑连接USB接口后无法正确识别,需要下载相应的硬件驱动。(例如我连接G29后,重新连接G27没有反应,需要去官网下载G27对应的Logitech Profiler驱动);
1.5 项目打包
分辨率设置
打包过程不再赘述,网上搜搜就有。不过最好在打包前设置好分辨率大小。
对于多屏设备,例如三屏下的模拟驾驶,如果显卡是N卡的话,需要在NVIDIA控制面板中开启Surround跨越选项。
当然也可以打包后设置分辨率,也对应几种方法:
-
对.exe文件新建快捷方式,目标中添加后缀
-WINDOWED -ResX = 5760 -ResY = 3240 -
在
WindowsNoEditor\项目名称\Config中新建DefaultUserGameSettings.ini,编辑分辨率;
[/Script/Engine.GameUserSettings]
bUseVSync=False
ResolutionSizeX=5760
ResolutionSizeY=3240
WindowPosX=-1
WindowPosY=-1
bUseDesktopResolutionForFullscreen=True
FullscreenMode=2
LastConfirmedFullscreenMode=2
PreferredFullscreenMode=2
Version=5
- 在同级目录下新建.bat脚本文件,指定需要的分辨率。
Airsim打包失败
遇到过Airsim项目打包失败的例子,经一番搜索后,把项目文件目录下的Intermediate文件夹删除后,即可打包成功。
2. MySQL数据存储
2.1 编写MySQL蓝图类
编写完后,将蓝图类放置在实验地图中,设置按R键开始记录数据,并设置自动接收输入,输入优先级应低于车辆,故设为1。
并将驾驶主车的输入优先级设为0。
2.2 局域网内连接MySQL
如图,一台计算机是无法直接根据IP地址访问局域网内另一台计算机的MySQL数据库,需要进行端口开放和权限设置。
首先,在服务器上开放数据库端口,一般是开放3306端口,具体端口根据设置的不同而不同。
之后,进行权限赋予,有两种方式: (1)更改root用户的host
update user set host='%' where user='root';
(2)创建一个新的客户端用户,并赋予权限 create user '自定义用户名'@'客户端电脑IP' identified by '自定义密码'; grant all privileges on . to '自定义用户名'@'客户端电脑IP';
create user 'lym'@'192.168.1.121' identified by 'adminlym';
grant all privileges on *.* to 'lym'@'192.168.1.121';
flush privileges;
之后测试连接,成功。
3.打包性能优化
3.1 体积优化
详见官方文档 核心就是查找标记为 创建压缩烘焙包(Create compressed cooked packages) 的选项并将其启用;以及共享材质着色器和库。
3.2 性能优化
这部分考究就比较多了,针对目前的项目采取的方法有: (1)项目设置里
- 取消
transparent lighting features(允许静态光照) - 取消
motion blur(动态模糊) - 取消
HDR eye adaptation - 降低物体的网格体密度等 (2)GameUserSettings.ini中
[ScalabilityGroups]
r.ScreenPercentage=25
r.ViewDistanceScale=0.4
r.PostProcessAAQuality=0
r.PostProcessingQuality=0
r.ShadowQuality=0
r.TextureQuality=0
r.EffectsQuality=0
sg.ResolutionQuality=25
sg.ViewDistanceQuality=0
sg.AntiAliasingQuality=0
sg.PostProcessQuality=0
sg.ShadowQuality=0
sg.TextureQuality=0
sg.EffectsQuality=0
或者使用蓝图的方式: