【发布时间】:2018-11-10 12:08:56
【问题描述】:
我的提升事件被每个客户接收两次,尽管它只被发送一次。我正在使用以下配置。我将它发送给一个或所有客户都没有关系。
public void OnEnable()
{
PhotonNetwork.OnEventCall += OnEvent;
}
public void OnDisable()
{
PhotonNetwork.OnEventCall -= OnEvent;
}
public void OnEvent(byte eventCode, object content, int senderId)
{
Debug.Log("Event recieved");
if (eventCode == genshieldcode )
{
object[] mydata = (object[])content;
int clickedview = (int)mydata[0];
string command = (string)mydata[1];
int clickerview = (int)mydata[2];
GameObject clicker = PhotonView.Find(clickerview).gameObject;
if (clicker != null)
if (LocalPlayerInstance != clicker)
return;
GameObject clicked = PhotonView.Find(clickedview).gameObject;
if (command == "generate")
{
Debug.Log("Generating Shield");
GameObject temp = Instantiate(shield);
temp.transform.position = clicked.transform.position;
}
else if(command =="destroy")
{
Debug.Log("Destroying shield");
GameObject temp = GameObject.FindGameObjectWithTag("shield");
if (temp != null)
Destroy(temp);
}
}
这是我发送事件的方式。该事件仅发送一次,因为我已经检查过了。
object[] myobject = new object[] { clicked.GetComponent<PhotonView>().viewID, "generate",clicker.GetComponent<PhotonView>().viewID };
int[] actors = new int[] { clicker.GetComponent<PhotonView>().ownerId };
RaiseEventOptions r = new RaiseEventOptions { TargetActors = actors };
PhotonNetwork.RaiseEvent(genshieldcode, myobject, true, r)
【问题讨论】:
-
确保订阅
PhotonNetwork.OnEventCall事件的组件不会在场景中出现两次。还要确保您拨打PhotonNetwork.RaiseEvent一次而不是两次。