1.5 - 函数复制

1_5.png

为能同时从 服务器客户端 进行查看,请在 Play (运行)的下拉框中,设置 Number of Clients (客户端数量)区域为2。

概述

除变量外,函数调用也可以被复制。 Replicated Function Calls (复制的函数调用)可被设置为 Reliable (可靠)或 Unreliable (不可靠)。 可靠的调用一定会发生,不可靠的调用在通讯频繁的时候可能会丢失。 大多数处理装饰视觉的复制函数都不可靠,以防止网络饱和。

有3种主要类型的复制函数: Multicast (多路广播), Server (服务器), 以及 Client (客户端)。 多路广播函数应在服务器上进行调用,在服务器上执行然后自动转发到客户端。 服务器函数由客户端调用,随后仅在服务器上执行。 客户端函数由服务器调用,随后仅在其所拥有的客户端上执行。

服务器和客户端复制函数具有额外的限制,它们仅能对具有 Net Owner (网络所有者)的actor使用。 如Actors为玩家控制器或由玩家控制器所拥有,Actors将具有网络所有者。 示例: 由玩家控制器所支配的pawn可在服务器或客户端上执行服务器或客户端复制函数。

本例中,Multicast函数处理由按下按钮所触发的装饰事件。

蓝图详细信息

BP_Button_Multicast 蓝图的事件图表中(其被分为下方的多个图片),您可以在第一张图片中看到重叠事件如何在服务器和客户端同时触发,而脚本的剩余部分仅仅通过使用 Switch Has Authority 节点来在服务器上运行。

点击查看放大图片

Button Pressed (按下按钮)或 Button Released (松开按钮)的自定义事件被调用时,由于它们都被设置为 Multicast (多路广播),它们在所有客户端上均被触发,这样每个人都能看到脚本随自定义事件而运行,而不仅仅是发起事件的玩家能看到。

点击以获得按下按钮事件的完整图片

点击以获得松开按钮事件的完整图片

在游戏中这样设置的结果是,在按下/松开按钮时,服务器和客户端都能看到被触发的事件。