下载 App

联机功能讲解:手动网络同步

修改于2021/01/20254 浏览游戏开发攻略
联机功能讲解:手动网络同步
联机功能在旧版本中会自动同步机械和零件的全部状态,比如零件是否发光,机械是否有碰撞,这种模式虽然制作联机游戏时入门简单,但我们在实际游戏制作中发现当状态改变比较频繁时会产生大量的网络通讯造成游戏卡顿。所以新版本中我们增加了一个“手动网络同步”开关,旧的自动同步功能在未来版本中将会被移除,所以新创建的联机游戏都应该在工程的设置面板中勾选“手动网络同步”开关
TapTap
首先手动网络同步模式下还是有几种功能是自动同步的:
1.创建机械
2.机械死亡
3.删除机械
4.自定义发射器发射机械
5.装备插槽产生装备
6.玩家同步数据,机械同步数据,地图同步数据
7.机械的位置和旋转
8.蓝色的逻辑方块调用红色的分机逻辑方块
9.红色的分机逻辑方块调用蓝色的逻辑方块
除此以外的所有功能调用都不会自动通过网络通知,比如关节运动,零件设置材质等等
手动模式下“所有机械”的逻辑在所有分机上都会运行。比如现在有A、B两个玩家进入了联机游戏,产生了a,b两个玩家机械分别属于两个玩家,还有c机械是AI机械。在旧模式下,A玩家只会运行a机械的逻辑,只有主机才会运行c机械的逻辑。但是在新的手动模式下,a、b、c三个机械的逻辑在A玩家和B玩家的设备上都会运行。
这样做的目的是,可以灵活的控制以下3中情况的逻辑:
1.可以分别运行而不需要同步的,比如机械上有个随时间亮灭的呼吸灯,因为变化是有固定规律的,不需要网络同步。这种逻辑很简单,只需要每个机械上直接运行对应的逻辑即可。
2.而有些逻辑是需要网络同步的,比如a机械做了一个挥手的动作,因为需要其他玩家也看到这个动作,所以需要使用手动调用网络通知的方式。
3.还有一些逻辑是只能控制者的设备运行的,比如UI,其他人是看不到的,所以其他人的设备要跳过这些逻辑。
其中第2种情况,可以使用零件变量中的“网络调用方法”功能,该方法会通过网络通知所有分机(包括自己)去调用这个名为“挥手”的自定义方法
TapTap
用这种模式一定要确保调用不要太频繁,如果需要同步的操作非常频繁,比如是一把每秒钟射击30次的机枪,那么将“发射”这个功能作为网络调用就容易造成游戏卡顿。这种情况就应该将“开始射击”和“结束射击”作为网络调用,这样一次连射只会产生两次调用。
而有时候网络通知的操作比较频繁而且只是一些特效表现并不影响玩法,比如冷兵器互相撞击时通过网络通知“产生火花”,那么可以使用“不可靠网络调用”这个方法,这个方法的特点是只会尝试发送一次网络消息,如果因为网络不稳定原因消息丢包了就不会再次尝试发送,大大提高了性能,但是也会导致这个调用有概率不会成功。
TapTap
当然通过“机械同步数据”的方式也可以实现同步,比如当角色血量变化时设置同步数据小数
TapTap
机械的“机械自定义数据变化”事件中处理数据变化的逻辑也可以实现同步,但这种方式只适合状态变化的同步,像玩家挥一下手或者发射一颗子弹这种瞬时动作就不适合了。
TapTap
而第3种情况,比如UI和键盘输入的逻辑只需要控制者一个设备来运行,那么就需要在其他分机上跳过这些逻辑,你可以使用如下方式判断当前机械是不是由当前分机控制的
TapTap
begincodeV1;
color:0,132,144;
name:初始化;
1:Mech 当前机械=act 1.this.getMech();
2:Player 玩家=act 1.this.getPlayer();
3:Player 当前分机玩家=fun getCurrentPlayer();
4:Bool 不是本地机械=varf Player.当前分机玩家.isSame(var 玩家);
5:Bool 不是本地机械=fun bool.not(var 不是本地机械);
endcode
注意截图中,“当前机械”,“当前分机玩家”,“不是本地机械”这几个变量都应该设置为全局变量
然后在生成UI的代码前面就可以加上判断,避免非控制者分机执行UI相关代码
TapTap
网络游戏开发时主要就是分以上三种情况,在实际制作中如果遇到两侧不同步的问题,需要使用调试功能具体查看每个分机逻辑的运行情况,不要靠主观逻辑猜测。
另外调试网络同步时,最好使用“功能调用/系统/调试/开关网络通讯日志”功能,根据输出的信息判断是否有过于频繁的网络调用。
TapTap
原则上不应该出现1秒内多次的连续网络调用,当出现不得不频繁调用时,你应该思考是否有更节约的方式将频繁调用改为简单的切换状态是调用一次,或者这么频繁的操作能不能改为每个分机各自运算,该操作是否不同步也不会影响游戏体验。
最后游戏作者要知道开发网络游戏比开发单机游戏要更加困难,建议尝试开发一个网络游戏之前先尝试制作一些单机游戏来练手。
官方教程反馈贴截图
官方教程反馈贴
首先要打开游戏开发者模式:在主界面右上角打开设置面板 勾选“游戏开发者模式” 然后就可以看到“切换开发者模式”按钮了 点击官方教程按钮就可以打开教程了 最新版本官方教程已经内置到游戏中,需要什么方面详细讲解的可以在下面跟帖
官方
12 赞
6 回复
星空隐形(不是真镜面,弄不了)截图
星空隐形(不是真镜面,弄不了)
星空隐形军用航天器、定向散热器 图中星空不限于天然光源,有人造光源。 星空隐形军用航天器,定向散热器、耗电制冷凸多面体镜面装甲(镜甲)等。镜甲航天器在星系(例:银河系)内最明显破绽,在有、无星系内天球高亮区(高亮区;例:银河)的背景中,镜面反射无、有高亮区。 激光炮的扩束镜和天文望远镜共用部分零件(反射镜、透镜、部分反射镜等); 武器兼推进器兼观测器; 弹头兼工质兼装甲(尝试弱化推进特征的舰队大概
联机功能讲解_快速测试
联机功能讲解:快速测试 如果你是游戏作者,首先打开一个地图编辑器,然后回到在工程设置界面点击“上传并测试”发布一次测试游戏。在测试中如果你要返回编辑,可以直接按Ctrl+T组合键,就会直接回到刚才的地图编辑器中。在编辑器中修改完毕后,再按一次Ctrl+T就会自动发布测试游戏并进入游戏中。 如果你使用的是手机版本,也可以点击上方的“地图设定”按钮打开地图设定面板,然后双击标题栏 注意:每次启动游
官方
2 赞
之前的沙盒玩家进入旧的编辑器的方式
新版本开始重点已经放到游戏开发工具上,旧的机械和地图编辑器只作为交易所出售素材的功能存在。所以将编辑器入口改为“交易所”中。 如果编辑的机械和地图不需要在交易所中售卖,不要再使用旧的编辑器,应该使用游戏工程模式,不仅没有数量限制,还可以使用完整的外部模型和音效等功能。 要进入旧的机械编辑器,首先要打开游戏开发者模式:在主界面右上角打开设置面板 勾选“游戏开发者模式” 然后就可以看到“切换开发者模式
官方
1 赞
5 回复
新版本游戏开发者模式打开方式
新版本开始为了将普通游戏玩家和游戏开发者明确区分开,避免普通玩家误入复杂的开发者界面,将开发者模式改为需要从设置面板中手动开启。 首先要在主界面右上角打开设置面板 勾选“游戏开发者模式” 然后就可以看到“切换开发者模式”按钮了
官方
4 赞
《我的战舰》4月6日不停服更新公告截图
《我的战舰》4月6日不停服更新公告
各位机械师: 我们预计将于4月6日下午16:00对游戏进行一次不停机更新!更新期间,所有玩家仍可以正常进入游戏。 本次更新内容为: 功能更新 1、下载游戏数据时增加进度显示; 2、游戏逻辑方块启动阶段增加进度显示; 3、优化游戏加载时间; 4、减少游戏长时间运行的内存持续分配; 5、引入多线程加速图片和音效的加载; 6、新增ogg格式音效第一次解压缩后本地缓存功能; 7、优化excel表格在游戏过
官方
13 赞
7 回复