Повышение Событие, полученное дважды каждым клиентом в Фотоне
Мое событие Raise получает дважды каждый клиент, хотя отправляется только один раз. Я использую следующую конфигурацию. Не имеет значения, отправляю ли я его только одному или всем клиентам.
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)
1 ответ
please try using this code, may be your event listener is being hooked twice somehow.
public void OnEnable()
{
PhotonNetwork.OnEventCall -= OnEvent;
PhotonNetwork.OnEventCall += OnEvent;
}
public void OnDisable()
{
PhotonNetwork.OnEventCall -= OnEvent;
}
public void OnEvent(byte eventCode, object content, int senderId)
{
PhotonNetwork.OnEventCall -= OnEvent; // comment this line if you need this function to be called more than once
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);
}
}