Unity MLAPI ServerRPC 未被调用

时间:2021-04-13 05:19:41

标签: c# unity3d rpc

我正在实施一个系统,让玩家可以从游戏世界中拾取物品。捡起物品后,我想销毁游戏对象。为此,我想我会创建一个删除对象的 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

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

[ServerRpc(RequireOwnership = false)]

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

答案 3 :(得分:0)

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