新建一个第三人称模板项目
同步Actor
以下步骤说明了如何将 Actor 设置为 Replicate,以及 Replicate 的 Actor 和非 Replicate 的 Actor 之间的区别。
1、在文件夹中找到Blueprint_Effect_Fire,并按下ctrl + w。
2、重复上述步骤。
3、将两个副本重命名为Fire_NoReplicate和Fire_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,您可以用这种方式只在执行脚本的远程客户端上生成该特效。