Error: "RPC method not found" on method that was never called
Error: "RPC method not found" on method that was never called
我有一个非常奇怪的问题。目前我正在开发一款小型跨平台“游戏”,其中一名用户佩戴 Hololens,另一名用户坐在 PC 前。 Hololens 用户解决了一个难题,而 PC 用户通过给出提示来帮助 Hololens 用户,例如突出显示元素。
在应用程序中,我有一个父元素(“Puzzle”)及其子元素(“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 应用程序端。在这里我得到一个非常奇怪的错误:
RPC method 'setChildren(Int32)' not found on object with PhotonView XXXX
我从未调用过 RPC 方法 'setChildren' 而且我也不想调用它。我已经研究了几个小时,但没有找到解决方案。如果有人知道如何解决它,我将不胜感激。谢谢!
好的,我在derHugo的冲动下解决了这个问题。非常感谢!
我需要重置双方的 RPC。这可以通过找到 PhotonServerSettings.asset-文件并打开“RPCs”段来实现,其中可以通过单击“清除 RPCs”来重置 RPCs。它正在运行。
我有一个非常奇怪的问题。目前我正在开发一款小型跨平台“游戏”,其中一名用户佩戴 Hololens,另一名用户坐在 PC 前。 Hololens 用户解决了一个难题,而 PC 用户通过给出提示来帮助 Hololens 用户,例如突出显示元素。
在应用程序中,我有一个父元素(“Puzzle”)及其子元素(“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 应用程序端。在这里我得到一个非常奇怪的错误:
RPC method 'setChildren(Int32)' not found on object with PhotonView XXXX
我从未调用过 RPC 方法 'setChildren' 而且我也不想调用它。我已经研究了几个小时,但没有找到解决方案。如果有人知道如何解决它,我将不胜感激。谢谢!
好的,我在derHugo的冲动下解决了这个问题。非常感谢!
我需要重置双方的 RPC。这可以通过找到 PhotonServerSettings.asset-文件并打开“RPCs”段来实现,其中可以通过单击“清除 RPCs”来重置 RPCs。它正在运行。