Unity MLAPI ServerRPC 没有被调用

Posted

技术标签:

【中文标题】Unity MLAPI ServerRPC 没有被调用【英文标题】:Unity MLAPI ServerRPC not getting called 【发布时间】: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() 的调用。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

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

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

[ServerRpc(RequireOwnership = false)]

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于Unity MLAPI ServerRPC 没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

python 一个lambda函数,它将EC2标记复制到所有相关的卷和网络接口。可以在我的网站http:// mlapi上找到完整的文章

python 一个lambda函数,它将EC2标记复制到所有相关的卷和网络接口。可以在我的网站http:// mlapi上找到完整的文章

Unity新的输入系统没有被触发

OnPointerEnter 和 OnPointerExit 没有被触发 Unity

Unity中获取一个本机没有被使用过的端口号

unityplayer没有被指定在windows上运行