Unity Photon PUN RPC调用

时间:2015-04-05 19:44:00

标签: c# unity3d rpc multiplayer photon

我对RPC和Photon PUN有疑问。

我在游戏中有一个调用RPC方法的GameObject。此游戏对象包含一个C#脚本(包含RPC方法)和带有/不带(应该相同)的PhotonView组件,观察到的脚本和ObserveOption等于Off。

我有一个必须射向立方体的角色。此多维数据集具有前面描述的脚本和组件附加到它。

RPC发送一次(当立方体与射弹碰撞时)但在我的场景中我有很多Cube应该接收消息,因为我必须降低命中立方体的健康状况。问题是只有1个Cube接收到RPC调用(RPC在游戏开始时被第一个实例化对象捕获)但是RPC应该被我的场景中的所有多维数据集接收(是吗?)。 p>

立方体完全相同,但它们有不同的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);
}

请帮助我理解我做错了什么。 谢谢。

3 个答案:

答案 0 :(得分:0)

如果需要为所有多维数据集调用RPC,请为每个多维数据集执行此操作。 目前,您仅为静态' photonView'引用的对象调用RPC。变量。根据它的初始化方式,RPC会调用该对象。

答案 1 :(得分:0)

我可能会迟到,但请尝试PhotonTargets.AllBuffered,这会使RPC调用在稍后加入的玩家上运行。

答案 2 :(得分:0)

可能会迟到但你试过这个吗? cube.cs附加到所有多维数据集。 在main.cs

cube[] allCubes = FindObjectsOfType<cube>();

for (int x = 0; x < allCubes.length; x++)
allCubes[x].reduceHealthRPC(dam,id);

这会将代码发送到具有一个目标ID的所有多维数据集,如果这是您的目标,但您最好只在单个多维数据集上使用rpc。