unity-game-engine - 如何在unity Netcode中为GameObject使用ClientRpc(或ServerRpc)?

标签 unity-game-engine networking

我无法理解如何正确使用这些 Rpc。有时它们有效,有时则无效。 示例:我有一个位于场景中的游戏对象(未在连接时实例化),称为“Book”,它有一个脚本(“SpellManager”),因此当两个玩家连接时,他们的场景中都有这个对象。 现在在该 SpellManager 脚本中,我希望我的主机/服务器在碰撞时更改法术变量。假设我有一个“string newSpell”变量,如何在服务器端更改此变量,然后将信息发送到客户端?我尝试过这样的事情(简化):

    private string newSpell;

    private void OnTriggerEnter(Collider other)
    {
        if (NetworkManager.Singleton.IsServer)
        {
            newSpell = "Earth";
            testClientRpc(Time.frameCount, newSpell);
        }
        else
        {
            print("OnClient ");
        }
    }
    [ClientRpc]
    public void testClientRpc(int somenumber, string _newSpell)
    {
        newSpell = _newSpell;
    }

但这会在服务器上引发错误:NullReferenceException: Object reference not set to an instance of an object Unity.Netcode.NetworkBehaviour.get_NetworkManager () (at Library/PackageCache/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c5a6aaa8ebb0abacb1bcebaba0b1a6aaa1a0eba2a4a8a0aaa7afa0a6b1b685f4ebf5ebf5e8b5b7a0ebf1" rel="noreferrer noopener nofollow">[email protected]</a>/Runtime/Core/NetworkBehaviour.cs:219) 它来自 _newSpell显然为空的变量?我什至尝试在 ClientRpc 中硬编码 newspell =“Earth”,同样的错误。示例/视频将不胜感激,我找不到类似的内容

最佳答案

  1. 具有从 NetworkBehaviour 派生的脚本的对象(因为您正在使用 RPC)必须附加一个 NetworkObject 组件。
  2. 如果您从非所有者对象调用RPC,则必须在属性选项中将requireOwnership选项设置为 false,即[ServerRpc(requireOwnership = false)]

关于unity-game-engine - 如何在unity Netcode中为GameObject使用ClientRpc(或ServerRpc)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71366351/

相关文章:

unity-game-engine - 使用内部大脑进行预训练网络的 Unity 机器学习会导致崩溃

c# - 我可以在 Hololens 中录制也使用相机的应用程序的视频吗?有没有办法两全其美?

c# - 使用 JsonFX 反序列化字典

java - okHttp NetworkOnMainThreadException 尽管有新线程

networking - 无法 ping 到 virtualbox 实例

java - 当我尝试将 Socket 设置为 255.255.255.255 时抛出异常

networking - 创建可通过网络发现的 Windows (win32) 服务

c# - Unity 中的随机纸牌生成

c# - Unity 中初始跳转后 "isGrounded"变量不会更改为 false

networking - 在每个客户端上同时启动计时器