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;
。
我从 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;
。