unity3d 统一光子PUN RPC调用

ocebsuys  于 2022-12-19  发布在  其他
关注(0)|答案(3)|浏览(324)

我有一个关于RPC和光子PUN的问题。
我的游戏中有1个GameObject调用RPC方法。这个游戏对象包含一个C#脚本(包含RPC方法)和PhotonView组件,有/没有(应该是相同的)观察到的脚本和ObserveOption等于Off。
我有一个角色,必须拍摄到一个立方体。这个立方体有前面描述的脚本和组件附加到它。
RPC只发送一次(当立方体被投射物碰撞时)但是在我的场景中我有很多立方体应该接收消息,因为我必须降低被击中立方体的健康。问题是只有一个立方体接收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);
}

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

9avjhtql

9avjhtql1#

如果需要为所有多维数据集调用RPC,请为每个多维数据集执行此操作。当前仅为静态“photonView”变量引用的对象调用RPC。RPC是否在该对象上调用取决于它的初始化方式。

cig3rfwq

cig3rfwq2#

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

brgchamk

brgchamk3#

可能会很晚,但你试过吗?cube.cs附加到所有的多维数据集。在main.cs

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

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

这将把代码发送到所有有一个目标id的立方体,如果这是你的目标,但是你最好只对单个立方体进行RPC。

相关问题