Для многих алгоритмов вам нужно, чтобы часы были синхронизированы между клиентом и сервером. Mirror делает это автоматически за вас.
Чтобы получить текущее время, используйте этот код:
double now = NetworkTime.time;
Он вернет одно и то же значение на клиенте и серверах. Он начинается с 0 при запуске сервера. Обратите внимание, что время является типом double и никогда не должно быть приведено к типу float. Приведение этого значения к значению float означает, что через некоторое время часы потеряют точность:
- через 1 день точность снижается до 8 мс
- через 10 дней точность снижается до 62 мс
- через 30 дней точность снижается до 250 мс
- через 60 дней точность снижается до 500 мс
Mirror также будет рассчитывать RTT(Время приема-передачи) как видно из приложения:
double rtt = NetworkTime.rtt;
Вы можете измерить точность.
double time_standard_deviation = NetworkTime.timeSd;
например, если это возвращает значение 0,2, это означает, что измерения времени колеблются вверх и вниз примерно на 0,2 с
Сбои в работе сети компенсируются сглаживанием значений с помощью EMA. Вы можете настроить, как часто вы хотите, чтобы ping отправлялся:
NetworkTime.PingFrequency = 2;
Вы также можете настроить, сколько результатов проверки связи будет использоваться при расчете:
NetworkTime.PingWindowSize = 10;