【UE5】网络同步,不同情况的简单实现
事件的复制
当在UE中进行session联网时,各端运行一个事件,它在各端的复制情况。
注:当在蓝图中勾选运行复制时,该蓝图才可以进行复制,此外还有复制运动等选项,变量也是可以进行复制的
一个开门事件,这个事件是拥有的客户端上运行的,而我在客户端运行开门事件,那么客户端会开门,那服务器端会怎么样?如果这个事件是在服务器上运行呢?如果我是在服务器端运行这个事件呢?
开门事件:开关门的逻辑。
打开三个端口,一个服务器端,2个客户端,查看它们在不同条件下的网络同步情况。
测试:
单一事件情况下
开门事件(组播)结果:
在客户端执行:本地执行,服务器端无反应,其他客户端无反应。
在服务器端执行:服务器端和客户端都执行,同步到其他客户端。
开门事件(在服务器上运行)结果:
在客户端或服务器端执行:服务器端执行,客户端无反应,其他客户端无反应。
开门事件(在客户端运行)结果:
在客户端执行:本地执行,服务器端无反应,其他客户端无反应。
在服务器端执行:本地执行,客户端无反应,其他客户端无反应。
如果你的角色蓝图开启了复制,但是使用了一个客户端事件,此时,你的客户端和服务器端是不匹配的。
会出现如:在客户端把门打开了,门是有碰撞的。但由于角色的移动是复制在服务器中的,数据以服务器端的数据为准,而在服务器的眼中你是没有打开门的,你站的位置也没有门,因此你可以穿过门移动,也就是出现了客户端与服务器端的不匹配。同理在服务器端开门也是一样的。
多事件情况下
添加一个中转事件来调用其他复制事件,会发生什么?
可以用Is Server节点来判断运行的对象是否是主机
1、事件1(在服务器上运行)→开门事件(在客户端运行)结果:
在客户端或服务器端执行:结果在本地执行,其他客户端无反应。
2、事件1(在服务器上运行)→开门事件(组播)结果:
在客户端或服务器端执行:结果在客户端和服务器端都执行,复制到其他客户端。
3、事件1(在客户端运行)→开门事件(在服务器上运行)结果:
在客户端或服务器端执行:在服务器端执行,其他客户端无反应。
4、事件1(在客户端运行)→开门事件(组播)结果:
在客户端执行:在客户端执行,服务器端和其他客户端无反应。
在服务器端执行:在服务器端、客户端和其他客户端都执行。
5、事件1(组播)→开门事件(在服务器上运行)结果:
在客户端或服务器端执行:在服务器端执行,其他客户端无反应。
6、事件1(组播)→开门事件(在客户端上运行)结果:
在客户端执行:在客户端执行,服务器端不执行,其他客户端无反应。
在服务器端执行:在服务器端、客户端和其他客户端都执行。
结论:
不同情况的简单实现
1.本地客户端
客户端执行,不复制到服务器。如:互动提示UI,受击效果。
实现方案:客户端触发,事件不复制即可。
2.客户端-服务器
客户端执行,复制到服务器,不复制到其他客户端。
实现方案:客户端触发→事件1(在服务器上运行)→具体实现→事件1(在客户端上运行)→具体实现。(应该有更好的方法,但是我不知道)
3.客户端-服务器-其他客户端
客户端执行,复制到服务器和其他客户端。如:使用技能、道具。
实现方案:客户端触发→事件1(在服务器上运行)→事件2(组播)→具体实现
4.服务器
服务器执行,不复制到客户端。
实现方案:服务器触发,事件不复制即可。
5.服务器-客户端
服务器执行,复制到客户端。
实现方案:服务器触发→事件(组播)→具体实现

















