事件的复制

当在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.服务器-客户端

服务器执行,复制到客户端。

实现方案:服务器触发→事件(组播)→具体实现