错误:从未调用过的方法上出现“找不到 RPC 方法”

Posted

技术标签:

【中文标题】错误:从未调用过的方法上出现“找不到 RPC 方法”【英文标题】:Error: "RPC method not found" on method that was never called 【发布时间】:2021-12-08 00:17:56 【问题描述】:

我有一个非常奇怪的问题。目前我正在开发一个小型跨平台“游戏”,其中一个用户戴着 Hololens,另一个用户坐在 PC 上。 Hololens 用户解决了一个难题,而 PC 用户通过给出提示来帮助 Hololens 用户,例如突出显示元素。

在应用程序中,我有一个父元素(“拼图”)及其子元素(“Part-X”)。 每个部分(“Part-X”)都有一个属性管理器脚本:

public class PropertyManager : MonoBehaviour

    private Renderer rend;
    public int identifier;
    private Color initColor;

    void Start()
    
        rend = GetComponent<Renderer>();
        initColor = rend.material.color;
    


    public void Highlight()
    
        rend.material.color = Color.red;
    

    public void Unhighlight()
    
        rend.material.color = initColor;
    

    [PunRPC]
    public void activeElemHandling(int viewId)
    
        transform.parent.GetComponent<ComponentHandler>().handleActiveElement(viewId);
    

父级有一个带有函数“handleActiveElement”的脚本:

public void handleActiveElement(int newActiveId)

    foreach (Transform child in transform)
    
        # set highlight color for new active element and unhighlight all other elements
        if (child.GetComponent<PhotonView>().ViewID == newActiveId)
        

            child.GetComponent<PropertyManager>().Highlight();
        
        else
        
            child.GetComponent<PropertyManager>().Unhighlight();
        
    

现在我以这种方式从 PC 用户那里触发 RPC:

void OnMouseDown()

    int viewId = photonView.ViewID;
    PropertyManager manager = GetComponent<PropertyManager>();
    string functionName = nameof(manager.activeElemHandling);
    photonView.RPC(functionName, RpcTarget.All, viewId); # It works the same by providing the plain string 'activeElemHandling'

虽然结果适用于 PC 应用程序一侧的应用程序,但它不适用于 Hololens 应用程序一侧。在这里我得到一个非常奇怪的错误:

在带有 PhotonView XXXX 的对象上找不到 RPC 方法“setChildren(Int32)”

我从未调用过 RPC 方法“setChildren”,我也不想调用它。我已经研究了几个小时,但没有找到解决方案。如果有人知道如何解决它,我将不胜感激。谢谢!

【问题讨论】:

HoloLens 上的构建是否可能不是最新的 => RPC 都存储在具有特定索引的构建时...当您调用该方法时,它只通过网络发送相应的索引,然后在接收方尝试再次找到该索引的方法... =>如果这些索引/注册的 RPC 方法在您的网络中的所有实例/构建中不匹配,那么这将导致您错误/意外行为。特别是如果您在平台相关编译下有任何 RPC 或只是您的应用程序的不同版本,则可能会发生这种情况 这听起来很合理。尽管如此,双关语版本绝对是平等的。我在编辑器中运行了这些测试。此测试用例中不存在其他 RPC。有什么方法可以做一个“干净”或统一的事情吗? 【参考方案1】:

好的,我在derHugo的冲动下解决了这个问题。非常感谢!

我需要重置双方的 RPC。这可以通过找到 PhotonServerSettings.asset-File 并打开“RPCs”段来实现,其中 RPCs 可以通过单击“Clear RPCs”来重置。它正在工作。

【讨论】:

如果人们只需要一点点提示就可以自己找到解决方案,我会非常高兴^_^

以上是关于错误:从未调用过的方法上出现“找不到 RPC 方法”的主要内容,如果未能解决你的问题,请参考以下文章

需要堆栈:\\我从未听说过的错误

为啥从未执行过的 Swift 3 代码会引发运行时错误?

护照身份验证不起作用。从未调用过的 Passport.serializeUser 和 passport.deserializeUser 会被调用

无法加载我从未添加过的文件或程序集“Microsoft.SharePoint.Library”

npm 错误! cb() 从未在 windows10 中调用过

ASP.Net Core:突然出现数百个构建错误