Unity Netcode 的 ClientRpc 未通过网络发送

Unity Netcode's ClientRpc is not being sent across the network

我从 https://docs-multiplayer.unity3d.com/docs/advanced-topics/message-system/clientrpc 复制并粘贴了 Unity Netcode 的示例代码来测试它。这是我的确切代码:

public class Test : MonoBehaviour
{
    public TMP_Text text;
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.P))
        {
            PongClientRpc(Time.frameCount, "hello, world"); // Server -> Client
        }
    }
    [ClientRpc]
    void PongClientRpc(int somenumber, string sometext)
    {
        text.text = $"{somenumber} : {sometext}";
        Debug.Log(text.text);
    }
}

我发现,无论是在主机应用程序还是客户端应用程序上调用该函数,它都只是作为一个普通函数运行,并且永远不会通过网络传输。我的期望是,当在主机应用程序上调用它时,RPC 将被传输到客户端应用程序并在那里执行,从而反映 TMP_Text 对象的变化,但显然情况并非如此。

为了选中所有框,此脚本附加到一个 GameObject,该 GameObject 也有一个 NetworkObject 组件。为了更好地衡量,我测试了带有和不带有 NetworkObject 组件的 TMP_Text 对象。在所有情况下,任何具有 NetworkObject 组件的对象都已正确添加到 NetworkManager 的网络预制件列表中。

我开始怀疑我是否了解 RPC 是什么或它应该如何工作。任何见解将不胜感激!

这个class需要从NetworkBehavior而不是MonoBehaviour导出,否则无法联网。

确保在 class 的顶部添加 using Unity.Netcode;