【问题标题】:Unity MLAPI ServerRPC not getting calledUnity MLAPI ServerRPC 没有被调用
【发布时间】:2021-04-13 05:19:41
【问题描述】:

我正在实现一个系统,玩家可以在该系统中从游戏世界中拾取物品。捡起物品后,我想销毁游戏对象。为此,我想我会创建一个删除对象的 ServerRPC,但没有调用 ServerRPC。我也尝试制作一个 ClientRPC,但也没有调用它。我注意到只有当游戏的主人试图拿起物品时才会调用它——关于如何解决这个问题的任何想法? documentation 非常简单,但如果我遗漏了什么,请告诉我。这是我的代码:

public override void Interact(GameObject player)
{
    player.GetComponent<PlayerInventory>().AddItem(this.item);
    Debug.Log("before");
    TestClientRpc();
    TestServerRpc();
}


[ServerRpc]
public void TestServerRpc()
{
    Debug.Log("server");
    // Destroy(gameObject);
}

[ClientRpc]
public void TestClientRpc()
{
    Debug.Log("client");
    // Destroy(gameObject);
}

编辑:image of the components on the weapon

编辑:这个类扩展了一个扩展 networkbehaviour 类的类。对象一开始只是坐在场景中——它们没有被生成/实例化(不确定这是否重要)。

【问题讨论】:

  • 通过dispose方法将游戏对象放入类对象中。因此,创建一个继承基类 GameObject 的类 MyGameObject。然后在 MyGameObject 中添加一个 dispose 方法。
  • 主要问题是 RPC 没有被调用——我认为在这里实现一个 dispose 方法对我没有帮助
  • @jdweng 你根本不应该从GameObject 继承......以及Dispose 方法对这里有什么帮助?
  • 您能否添加您的课程的其余部分,也许还可以向我们展示您的设置如何......哪些组件附加到该对象等
  • 类 Dispose() 方法会销毁类中的所有对象。您可以在 dispose 方法中添加对 Destroy() 的调用。

标签: c# unity3d rpc


【解决方案1】:

这个问题最合理的解决方案,要么是在前面的一些行中遇到错误,要么正如其他人指出的那样, requireOwnership 没有设置为 false 。 对于 MLAPI 的深入分析,https://youtube.com/channel/UCBStHvqSDEF751f0CWd3-Pg 我发现这个频道上的教程系列最好

【讨论】:

    【解决方案2】:

    我也有同样的问题。看了 2 天,但老实说,我倾向于认为这是一个错误。

    【讨论】:

    • 该死...好吧,如果您找到解决方法或其他什么,请告诉我:/
    【解决方案3】:

    我需要将以下属性添加到我的 ServerRpc:

    [ServerRpc(RequireOwnership = false)]

    因为玩家不是该物品的所有者。

    【讨论】:

      【解决方案4】:

      我只是花了 4 个多小时把头撞在墙上,因为他们没有在文档中写下这些重要信息。从不拥有网络对象的客户端调用 ServerRpc 时,应将 RPC 属性设置为 RequireOwnership = false。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-02
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多