我有一个关于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);
}
请帮助我理解我做错了什么。谢谢。
3条答案
按热度按时间9avjhtql1#
如果需要为所有多维数据集调用RPC,请为每个多维数据集执行此操作。当前仅为静态“photonView”变量引用的对象调用RPC。RPC是否在该对象上调用取决于它的初始化方式。
cig3rfwq2#
我可能会迟到,但请尝试
PhotonTargets.AllBuffered
,这将使RPC调用运行在稍后加入的球员。brgchamk3#
可能会很晚,但你试过吗?
cube.cs
附加到所有的多维数据集。在main.cs
中这将把代码发送到所有有一个目标id的立方体,如果这是你的目标,但是你最好只对单个立方体进行RPC。