在蓝图中同步Actor(Replicating Actors in Blueprints)【UE4】【Blueprint】

新建一个第三人称模板项目

同步Actor

以下步骤说明了如何将 Actor 设置为 Replicate,以及 Replicate 的 Actor 和非 Replicate 的 Actor 之间的区别。

1、在文件夹中找到Blueprint_Effect_Fire,并按下ctrl + w。

2、重复上述步骤。

3、将两个副本重命名为Fire_NoReplicateFire_Replicate

4、打开Fire_NoReplicate 蓝图并单击ClassDefaults按钮,然后在Details 面板中,取消选中Net Load on Client

取消此选项后,加载地图时,这个Actor不会在客户端上自动加载。由于Reolicates也为勾选,所以就算它应该被创建出来的时候,这个Actor也不会在客户端上显示。

5、编译并保存,然后关闭此蓝图打开Fire_Replicate蓝图。

6、点击ClassDefaults按钮,然后在Details面板中选中Replicates

选中Replicates即表示可在客户端上同步此Actor。由于也选中了 Net Load on Client ,所以在地图加载时,Actor将自动加载并在客户端机器上显示。Replicates的用处就是,如果你想在游戏期间某个时刻而非地图加载时生成Actor,您将需要启Replicates

以指示生成Actor时继续操作并在客户端机器上生成副本。

7、编译并保存,然后关闭蓝图。

8、将Fire_NoReplicate蓝图 拖放到你的关卡。

9、将Fire_Replicate 蓝图拖放到你的关卡。

10、单击 Play 按钮旁的下箭头,并将 Number of Players 选项更改为 2

11、运行游戏。

当你在编辑器中开始游戏且打开新的客户端窗口时,您应注意到 Fire_NoReplicate 蓝图在服务器上显示,而未在客户端上显示。然而,如上所示,Fire_Replicate 蓝图同时显示在客户端和服务器上。

 

动态创建同步的Actor

在此示例中,我们将继续以上 Replicating Actors 示例。

以下步骤说明了如何在游戏过程中使用 Replication 在服务器/客户端上动态生成 Actor。

1、在关卡视图中,从关卡中删除 Fire_Replicate 和 Fire_NoReplicate Actor。

2、从 All Classess 下的 Modes 菜单中,将两个 Target Points 拖入您的关卡。

3、将一个 Target Point 重命名为 No_Replicate,另一个重命名为 Replicate,然后在 World Outliner 中同时选择两者。

4、从主工具栏的 Blueprints 菜单中打开 Level Blueprint

5、在 Level Blueprint 中,在图表中 右键 并选择 Create References to 2 selected Actors 选项。

6、再次在图表中 右键,然后搜索和添加 Event Begin Play 节点。

7、在图表中 右键 并搜索和添加 Spawn Actor from Class 节点,然后将 Class 设置为 Fire_Replicate

8、重复上述步骤以再创建一个 Spawn Actor from Class 节点并将类设置为 Fire_NoReplicate

9、如下所示,连接节点。

10、拖开蓝色 Replicate 节点并搜索和添加 Get Actor Transform 节点。

11、将 Get Actor Transform 节点连接到 Spawn Actor from Class 节点的 Spawn Transform

12、重复蓝色 No_Replicate 节点上述两个步骤。

然后,我们将添加 Switch Has Authority(或 Authority Guard)节点以确定由 Authority(服务器)还是 Remote 机器(客户端)执行该脚本。通常,此选项将设置为 Authority,以确保只有服务器可以执行游戏性关键脚本,如调整玩家生命值或分配分数、经验等,因为您不希望让客户端通过执行此类脚本来作弊。

13、拖开 Event Begin Play 节点并添加 Switch Has Authority 节点。

14、编译,然后关闭 Level Blueprint 并在编辑器中开始游戏。

您应该会看到,由于只有服务器执行了脚本,两种喷火效果都显示在服务器上,而只有设置为同步的喷火效果显示在客户端上。当您想在服务器或客户端(而非两者)上生成某物时,或更重要的是,在服务器或客户端上执行 Switch Has Authority 节点下的任何脚本时(如上所述),此操作非常有用。

15、返回 Level Blueprint 并拖开 Remote 针,然后如下所示连接此针。

16、编译,然后关闭 Level Blueprint 并在编辑器中开始游戏。

您现在应该可以看到,由于 Switch Has Authority 设置为 Remote,所以其下的脚本仅在客户端而非服务器上执行。例如,您拥有玩家受到伤害时可应用的某种屏幕特效,通过将 Remote 用作 Authority Guard,您可以用这种方式只在执行脚本的远程客户端上生成该特效。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值