我有关于 RPC 和 Photon PUN 的问题。
我的游戏中有 1 个调用 RPC 方法的游戏对象。该游戏对象包含一个 C# 脚本(包含 RPC 方法)和带有/不带有(应该相同)观察到的脚本的 PhotonView 组件,并且 ObserveOption 等于 Off。
我有一个必须射击立方体的角色。该立方体具有前面描述的脚本和附加到其上的组件。
RPC 发送一次(当立方体与射弹碰撞时),但在我的场景中,我有许多立方体应该接收消息,因为我必须降低命中立方体的运行状况。问题是只有 1 个立方体接收 RPC 调用(RPC 被游戏开始时第一个实例化的对象捕获),但 RPC 应该被我场景中的所有立方体接收(对吗?)。
这些立方体完全相同,但它们具有不同的 photonView ID(正确),因此我们可以检查减少生命值的命中立方体是否是正确的。
这是代码的重要部分:
public static void reduceHealthRPC(float damage, int viewID)
{
photonView.RPC("reduceHealth", PhotonTargets.All, damage, viewID);
}
[RPC]
public void reduceHealth(float damage, int viewID)
{
if(this._viewID != viewID)
{
Debug.Log ("The view ID is not mine. My viewID is: " + _viewID + ", and the one which is coming form RPC is: " + viewID);
return;
}
currentHealth -= damage;
Debug.Log("My life is: " + currentHealth);
}
请帮助我了解我做错了什么。 谢谢你。
如果您需要为所有多维数据集调用 RPC,请为每个多维数据集调用 RPC。 目前,您仅针对静态“photonView”变量引用的对象调用 RPC。根据它的初始化方式,RPC 会调用该对象。
我可能会迟到,但请尝试
PhotonTargets.AllBuffered
,这将使 RPC 调用在稍后加入的玩家上运行。
可能会很晚,但你试过这个吗?
cube.cs
附着在所有立方体上。
在main.cs
cube[] allCubes = FindObjectsOfType<cube>();
for (int x = 0; x < allCubes.length; x++)
allCubes[x].reduceHealthRPC(dam,id);
这会将代码发送到具有一个目标 ID 的所有多维数据集,如果这是您的目标,但您最好只在单个多维数据集上进行 RPC。