背景

我们在游戏开发、仿真推演中可能会遇到这样的需求:

  1. 要搭建局域网,可以多人对战的。
  2. 要可以回放,能把大家玩耍的过程记录下来,重放给玩家们看,做复盘。

于是我们需要开发【联网】和【回放】功能。联网使用RPC方式,通过事件发送来实现。回放是将事件按时间顺序记录下来的方式,也从网络模块里抓信息存下来。
但这时我们可能会遇到问题。联网和回放都是用的网络模块,冲突了怎么解决?打印时报错了:“客户端漫游失败,待定网络游戏创建失败” 怎么解决?

问题描述:

  1. 创建UE4工程后,使用蓝图创建多人局域网蓝图,在多人局域网下测试,可以运行。
  2. 单独制作回放(重播)系统,可以运行。
  3. 但将多人局域网和回放系统放一起就无法同时存在。具体问题:在PIE模式下可以联网,可以回放。但Standalone模式无法联网,无法回放。在发布独立游戏过程中无报错。
  4. 经测试:能搜索到房间session但无法加入session。于是想到使用NetworkError和TravelError 对gameinstance检测(蓝图如下图)

    测试结果:Network并没有报错,但得到TravelError的报错如下: 客户端漫游失败,待定网络游戏创建失败

检查结果:

  1. 多人网络session蓝图,创建session、find session、join session 无问题
  2. 回放系统无问题
  3. 找了另外一个联网工程,代码对比排查后。发现问题很可能出在配置上。

找到了解决方法

打开UE4工程下的Config/DefaultEngine.ini文件,这里面有UE4联网的设置。允许UE4链接局域网、steam、还是不允许联网。

找到对应的中括号的位置并增加或修改如下代码。如果没有中括号的项,可以自己创建一个。
如果你跟我一样UE4工程体量很大,那么DefaultEngine.ini内的信息也会很多,我们找的时候需要点耐心,


[/Script/Engine.GameEngine]
#使用井号可注释
#局域网配置,有这条才能连局域网玩
NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="/Script/OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")#回放系统配置,但无法联网的游戏  也无法启用回放系统。 注意前面有个+,就是说在局域网基础上 追加 对回放的支持。
+NetDriverDefinitions=(DefName="DemoNetDriver",DriverClassName="/Script/Engine.DemoNetDriver",DriverClassNameFallback="/Script/Engine.DemoNetDriver")#链接到Steam平台的配置,局域网用不上,就先注释掉
#+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")[/Script/OnlineSubsystemUtils.IpNetDriver]
#一堆Copy过来的代码,不太懂,就直接用了----------------------------
AllowPeerConnections=False
AllowPeerVoice=False
ConnectionTimeout=60.0
InitialConnectTimeout=60.0
RecentlyDisconnectedTrackingTime=120
TimeoutMultiplierForUnoptimizedBuilds=1
KeepAliveTime=0.2
MaxClientRate=100000
MaxInternetClientRate=100000
RelevantTimeout=5.0
SpawnPrioritySeconds=1.0
ServerTravelPause=4.0
NetServerMaxTickRate=30
MaxNetTickRate=120
NetConnectionClassName="/Script/OnlineSubsystemUtils.IpConnection"
MaxPortCountToTry=512
ResolutionConnectionTimeout=20.0
#一堆Copy过来的代码,不太懂,就直接用了----------------------------[/Script/Engine.NetDriver]
#如果有控制、声音、Actor等需求。这里是从其他地方copy过来的,我眼下用不上,但也保留了
+ChannelDefinitions=(ChannelName=Control, ClassName=/Script/Engine.ControlChannel, StaticChannelIndex=0, bTickOnCreate=true, bServerOpen=false, bClientOpen=true, bInitialServer=false, bInitialClient=true)
+ChannelDefinitions=(ChannelName=Voice, ClassName=/Script/Engine.VoiceChannel, StaticChannelIndex=1, bTickOnCreate=true, bServerOpen=true, bClientOpen=true, bInitialServer=true, bInitialClient=true)
+ChannelDefinitions=(ChannelName=Actor, ClassName=/Script/Engine.ActorChannel, StaticChannelIndex=-1, bTickOnCreate=false, bServerOpen=true, bClientOpen=false, bInitialServer=false, bInitialClient=false)[OnlineSubsystem]
#无法联网,经测试此种方法无法链接局域网。就好像一个网络开关一样。
#DefaultPlatformService=Null#允许联网,经测试在断开网线后,此种方法可以组建局域网,并非链接到steam平台。
DefaultPlatformService=Steam[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName=OnlineSubsystemSteam.SteamNetConnection[/Script/WindowsTargetPlatform.WindowsTargetSettings]
Compiler=VisualStudio2017

设置完成后,重启UE4引擎,再次以Standalone模式运行游戏,就可以既支持联网,也可以录制回放了。

重点1:

是 [/Script/Engine.GameEngine] 这个设置,由于我的游戏是局域网的,不需要链接steam平台。而且局域网支持录制回放,所以我用注释的方式关闭了OnlineSubsystemSteam.SteamNetDriver。

#局域网配置
NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="/Script/OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")#回放系统配置,但无法联网的游戏  也无法启用回放系统。
+NetDriverDefinitions=(DefName="DemoNetDriver",DriverClassName="/Script/Engine.DemoNetDriver",DriverClassNameFallback="/Script/Engine.DemoNetDriver")#链接到Steam平台的配置
#+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
注意:GameNetDriver 和 DemoNetDriver 两个名字要分开,不能用一个替代,否则错误。
我测试时,一看都是一样的,那就合并了把,就把 DemoNetDriver 改成了 GameNetDriver ,结果报错了。

重点2:

把 DefaultPlatformService 设置成Null ,无法联局域网。设置成steam后,可以链接局域网。
在断开路由器跟互联网的链接后,使用DefaultPlatformService=Steam,路由器的局域网段内,可以顺利搭建局域网多人游戏。说明此处的steam并非Steam游戏平台。如下代码

[OnlineSubsystem]
#无法联网,经测试此种方法无法链接局域网。
#DefaultPlatformService=Null#允许联网,经测试在断开网线后,此种方法可以组建局域网,并非链接到steam平台。
DefaultPlatformService=Steam

以上基于经验性探索,有错误请朋友们指正,希望能帮助到朋友们。

关于UE4多人局域网联机游戏中联网和回放的设置细节问题相关推荐

  1. 多人联机游戏中联网模块(Socket)的设计和各种问题解决

    这是我自己做的一个多人联机游戏中网络部分的总结.全部为自己全新做的,没用开源软件(有一个网络游戏开源软件Raknet).目的是写一个属于自己的可靠网络模块,修改.扩展后在很多地方都能用得着.也想自己从 ...

  2. 网络无法找到计算机6,电脑中玩文明6局域网联机游戏找不到房间如何解决

    许多用户都喜欢在玩游戏的时候通过局域网联机方式跟好朋友们一起玩,但是有时候会遇到一些问题,比如有用户在电脑中玩文明6的时候,已经开启房间了需要其他玩家加入,可是有些玩家却找不到房间在哪里,导致不能游戏 ...

  3. 局域网联机游戏找不到服务器,N2N组建虚拟局域网联机遇到搜不到房间的问题一例...

    N2N搭建虚拟局域网联机玩游戏,朋友老是说搜不到我建的房间,但是我这边却可以搜到他的. 环境 电脑A:192.168.10.1 电脑B:192.168.10.2 这里以CS为例,其他游戏通用 A建好房 ...

  4. rust 局域网联机_Steam上有哪些值得推荐的可以多人局域网联机的游戏?

    前面说的很多了,但是我发现没说到我那肝了一两年的糜烂的大学回忆啊! 方舟:生存进化... 方舟的世界里,需要采集资源,制作食物,制作武器建造防御工事,抵御来自大自然的天气以及体型巨大的史前恐龙.当然也 ...

  5. 【UE4笔记】蓝图联机游戏制作

    文章目录 制作用户界面 初始主菜单MainManu 搜索服务器界面 FindServer 搜索到的单条服务器+加入按钮 蓝图逻辑 关卡蓝图 主菜单MainManu 搜索服务器界面 FindServer ...

  6. 多人对战游戏中的阵营需分与设计

    我们考虑一个组队大乱斗玩法,并分析其中关于阵营的需求与设计. 组队大乱斗玩法包含以下元素: 1.自己以及两名队友 2.两组敌军,每组敌军三名成员(与己方等同的实际玩家) 3.中立Boss及机关 4.散 ...

  7. UE4 无用の小技巧之联机游戏获取自身控制器

    文章内容仅为个人学习所得,如有错误,还请指正!谢谢 问题: 通常在UE4中获取玩家控制器是使用GetPlayerController,但在联机游戏中,想要获取玩家所拥有的控制器时,常规的GetPlay ...

  8. 莉莉丝发布6款游戏中4款Cocos,我们来聊技术

    今天的各种新闻各种行业媒体,都被莉莉丝的发布会刷屏了.媒体基本上都谈游戏性.情怀.收入预期,没人站在技术角度写.昨晚我有幸受邀参加了发布会,看了6个游戏的现场演示,那么我就从技术角度分析写一篇. 信文 ...

  9. AR联机游戏制作过程记录(11.11)

    AR的摄像机:在unity中,多人AR的摄像机位置一直是(0,0,0).(所以每个人进入游戏场景中的时候都叠在一起的吗).当一个玩家生成某个(0,2,0)位置的A物体时.其他玩家看到的那个A物体也是处 ...

最新文章

  1. html块级元素对齐方式,块级元素的三种垂直水平居中的方法
  2. Ubuntu访问Windows共享文件夹
  3. 终于搞定T43上的Access Connection了!
  4. Bootstrap中的条纹进度条使用案例
  5. PHP数组的访问方法有几种,数组常用方法有哪些
  6. java 异常练习题_Java 异常(习题)
  7. jni java返回数组_Android开发实践:Java层与Jni层的数组传递
  8. 数据大师Olivier Grisel给志向高远的数据科学家的指引
  9. 2016年工作中遇到的问题11-20
  10. Python版蚊子大作战源代码,超解压的灭蚊小游戏,多种道具
  11. 北斗与GPS有哪些区别?
  12. 在python中,计算Sum = m + mm + mmm +mmmm+.....+mmmmm.....,输入两个数m,n。m的位数累加到n的值,列出算式并计算出结果:
  13. Web功能测试主要包括哪些方面?
  14. 【智能算法学习】JAYA算法
  15. 计算机盘0字节可用,本地磁盘显示0字节可用数据恢复方法教程
  16. 计算机101页报告翻译,冯诺伊曼 101页报告 First Draft of a Report on the EDVAC
  17. 穿山甲android对接错误码40029,空Android项目集成Cocos、穿山甲。Lua调用网络接口。...
  18. 基于非对称纳什谈判的多微网电能共享运行优化策略
  19. 北斗导航 | 北斗/GNSS精密定位:从PPP-RTK 到 Vision-PPP(第十一届中国卫星导航年会报告)
  20. linux 应用层gpio中断_linux下GPIO中断驱动US100传感器--Apple的学习笔记

热门文章

  1. 把html表单提交给php,怎样将HTML表单提交给PHP文件
  2. 互联网工作中工单答疑多引发的联想
  3. 2.4-CSS基础--颜色常见取值
  4. python pandas excel 慢,如何在pandas中使用read_excel提高进程速度?
  5. RTOS论文笔记(一)
  6. Tableau——制作折叠菜单隐藏筛选器和图例
  7. Process Explorer调试
  8. What is a Lightweight Methodology? 什么是轻量级方法?(英汉对照) (转)
  9. [COGS1000]伊吹萃香 最短路
  10. olist巴西电商数据分析项目 sql+tableau