Photon PUN跨Hololens与PC通信出现未调用setChildren RPC方法找不到报错
这个问题90%以上是Hololens对应的UWP平台IL2CPP代码裁剪,导致PUN的RPC方法名映射错位,或者目标RPC方法被裁剪导致的,以下是逐一排查解决的步骤:
- 第一步:禁止IL2CPP裁剪你的RPC方法
给activeElemHandling方法额外添加[UnityEngine.Scripting.Preserve]属性,防止编译时被当成无用代码裁剪,修改后的代码如下:
同时在Player设置的UWP配置页,找到「Other Settings」-「Optimization」,确认「Managed Stripping Level」设置为低(Low)或者禁用,避免过度裁剪。[PunRPC] [UnityEngine.Scripting.Preserve] public void activeElemHandling(int viewId) { transform.parent.GetComponent<ComponentHandler>().handleActiveElement(viewId); } - 第二步:替换RPC调用的方法名获取方式
不要用nameof获取方法名,UWP平台部分编译配置下nameof的映射可能出现异常,直接写死RPC方法名字符串:photonView.RPC("activeElemHandling", RpcTarget.All, viewId); - 第三步:校验PhotonView的脚本挂载一致性
确认所有带PhotonView的Part-X子对象,在Hololens打包的场景中确实挂载了PropertyManager脚本,不要因为平台差异的场景配置导致脚本缺失。 - 第四步:清理PUN的RPC映射缓存
打开Unity菜单栏的「Window」-「Photon Unity Networking」-「PUN RPC List」,点击「Refresh」按钮重新生成RPC方法列表,避免旧的无效RPC映射残留到打包文件中。 - 第五步:添加调试日志定位触发源
如果你完成以上步骤还是报错,可以在PUN的源码PhotonNetwork.cs中找到处理RPC调用的逻辑,在报RPC method not found的位置添加日志,打印当前触发报错的PhotonView ID、调用方来源、方法名,确认是否是其他未知逻辑触发了异常RPC调用。
内容的提问来源于stack exchange,提问作者Vallout
相关产品推荐
相关产品推荐

