所有示例使用第三人称模板创建的项目并带有初始资源StarterContent
Function Replicateion(简称RPC)是在本地调用但在其他机器上远程执行的函数。RPC可以实现客户端或服务器之间相互发送消息。RPC可以设置为Reliable或Unreliable,其中Reliable调用必定发生,而Unreliable调用可能会因为网络问题被丢弃。因此大多处理视觉效果的RPC应该设置为Unreliable来避免过多地占用网络。
RPC主要包括Multicast(广播)、Run On Server(在服务端执行)和Run On Owning Client(在客户端执行)三种类型。其中广播类型在服务器上调用执行,然后自动转发给客户端;在服务端执行的函数有客户端调用,然后仅在服务器执行。在客户端执行的函数由服务器调用,然后仅在自己的客户端上执行。
在蓝图中使用RPC:
Mulitcast:
1、打开ThirdPersonBP/Blueprints中的ThirdPersonCharacter蓝图,添加一个按下空格时在玩家为之生成火焰特效的事件。蓝图非常简单直接上图。
image.png
2、更改Number of Players改为4后运行。
image.png
可以看到所有窗口只有自己按下空格时才能生成火焰特效并且只能看到自己的特效。
3、在ThirdPersonCharacter蓝图添加一个MulticasTest事件并将Replicates设置为Multicast,将蓝图改为如图所示。
image.png
4、点击Play运行。
image.png
看到服务器上生成的特效在所有客户端都能看到,而客户端生成的特效只有自己才能看到。
Run On Server:
重复步骤3将Replicates分别改为Run On Server。此处直接上效果图。
image.png
此时不论谁按空格键,只有服务器上相应的角色可以生成特效,客户端并不能看到任何效果。如果想要在客户端也能看到效果,我们需要确保特效设置为Replicates。
打开特效蓝图,并选中Replicates选项后重新开始运行。
image.png
所有客户端都能够看到全部的特效。
Run on owning Client:
1、打开ThirdPersonCharacter蓝图,创建一个String类型的变量Inventory并设置为Instance Editable和Replicated
image.png
2、添加按P键打印Inventory的事件蓝图。
image.png
3、在场景中添加一个Box Trigger
image.png
4、取消Rendering下面的Actor Hidden In Game
5、添加蓝图,重叠触发器时,如果重叠发生在服务器上,在服务器上运行 Add Item 事件,并将它复制到自己的客户端;当人物退出触发器盒时,在服务器上运行 Remove Item 事件,并将其复制到自己的客户端。其中Add Item 和 Remove Item 事件为自定义事件,并且Replicates属性全都为Run on owning Client。
image.png
6、编译运行。
image.png
image.png
image.png
image.png
image.png
image.png
可以看出刚开始启动时,每个角色打印的都为空,当一个角色进入触发器后会显示文本Item added ,按P时文本改为"has the item ",人物退出触发器会打印“Item Removed”,再次按P会打印空字符
网友评论