Повышение Событие, полученное дважды каждым клиентом в Фотоне - PullRequest
0 голосов
/ 10 ноября 2018

Каждое клиентское событие дважды получает мое повышение, хотя отправляется только один раз. Я использую следующую конфигурацию. Не имеет значения, отправляю ли я его только одному или всем клиентам.

 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 Ответ

0 голосов
/ 10 ноября 2018
  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);

        }


    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...