Повышение Событие, полученное дважды каждым клиентом в Фотоне

Мое событие 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);

        }


    }
Другие вопросы по тегам