private void OnEnable() { netGO = GetComponent <NetGO>(); //подписываемся на входящие сообщения netGO.OnMessageGo += OnMessageGo; //подписываемся на сетевой апдейт netGO.OnGoFrameUpdate += OnGoFrameUpdate; InvokeRepeating("RandHeal", 1, 1); lastData = new GoMessPlayerData(); }
private void OnGoFrameUpdate() { if (!netGO.isMy) { return; // если это не наш объект то выходим } GoMessPlayerData message = new GoMessPlayerData(); bool send = false; if (lastData.mouse == head.transform.rotation.eulerAngles.x) { //если данные не изменились, то записываем значение 0 //протобуф не будет добавлять в сериализацию дефолтные значения //так что 0 это по сути не отправлять данные message.mouse = 0; } else { message.mouse = head.transform.rotation.eulerAngles.x; lastData.mouse = message.mouse; send = true; } if (lastData.heal == heal) { message.heal = 0; } else { message.heal = heal; lastData.heal = heal; send = true; } if (send) { netGO.SendGoMessage((byte)CommandType.MessPlayerData, message); } }
private void OnMessageGo(byte code, byte[] data) { switch ((CommandType)code) { case CommandType.MessPlayerData: //у нам пришел наше сообщение как пример передачи доп данных от объекта к объекту //распаковываем данные согласно тому типу который упаковали (в том числе для этого нужен код, или команда) GoMessPlayerData message = GoMessPlayerData.Deserialize <GoMessPlayerData>(data); //Поворачиваем голову согасно данным if (message.mouse != 0) { head.transform.localRotation = Quaternion.Euler(message.mouse, 0, 0); } if (message.heal != 0) { heal = message.heal; } break; default: break; } }