目录
客户端与服务端的相关基础理论这里不做讲解,如果看过笔者写的文章,想必懂得都懂:
如果没看过也不影响下面的阅读,因为这里讲的与会话有所不同。
大道理很多,随便都可以搜到,而这里笔者将用蓝图进行一个简单的讲解:
首先认识一个宏:
Switch Has Authority:Switch Has Authority宏是一个用于多玩家游戏开发的功能。
它可以用来检查当前运行游戏的实例是否具有服务器权限或客户端权限。
在多玩家游戏中,通常需要区分服务器和客户端的不同行为。
服务器通常负责处理游戏逻辑,并向客户端发送更新。
而客户端则接收来自服务器的更新,并显示给玩家。
蓝图中的代码是这样子的:
所以使用它的Authority就相当于是在服务端去执行。
Actor的Replicates:
用于在服务器和客户端之间同步变量的值,以确保所有玩家都可以看到和使用相同的变量值。
我们做两个Actor类,都放置一个方块,一个将Replicated打勾,一个不打勾【默认情况下是不打勾的】:
之后我们到关卡蓝图中在地图里面进行创建,让服务端进行两者的创建:
第一个创建的是一个没有Replicated的Actor,第二个创建的是有Replicated的Actor。
因为用多人游戏视角打开,3人,监听服务器的方式,这样我们就可以以两个客户端Client和一个服务器的方式来查看场景中的情况:
可以看到在服务端,是有2个方块被创建的,而在两个客户端里面,都只有第二个将Replicated打勾的方块。
RepNotify与Replicated是什么意思?
RepNotif:用于在客户端上触发回调函数,以响应服务器端变量的更改。
Replicated:用于在服务器和客户端之间同步变量的值,以确保所有玩家都可以看到和使用相同的变量值。
这么说可能不是很懂,所以做几个简单的例子,首先是Replicated。
属性的Replicated与RepNotif:
Replicated:
首先是记得将Actor的Replicates打开,负责即使将属性里面的Replicated选中也没有办法进行复制。
给属性进行设置:
选择这个之后,属性的右上角就会出现云朵:
然后我们创建一个相对应的函数:
开始做一个无限循环的计时器,每2s更新一下数值【随机数值】,然后用tick每2秒去打印一下当前数值的大小。
同样,我们需要一个对比项,所以直接复制这个actor,并将这个浮点改为没有Replicated的,不过其他的功能是一样的:
结果如下:
客户端都接收到了服务端改变的ReplicatedFloat,但是客户端是接收不到服务端的Float的。
RepNotif:
首先别忘了:用于在客户端上触发回调函数,以响应服务器端变量的更改。
所以我们将变量设置为RepNotif后会在左侧的函数中自动生成一个函数:
函数生成之后,我们开始写一个简单的逻辑:
我们在服务端中,每2s更新一下我们的变量:
然后是我们的回调函数:
因为一旦值发生了改变,就会调用这个函数,所以我们在这里进行print:
这样子就可以每2s进行打印,结果很好: