С получением игровых локаций разобрались. Здесь важен каждый пакет, потому TCP-природа WebSocket приходится кстати.
Но TCP также несет определенный оверхед, который может быть вреден для получения данных перемещения NPC и других игроков.
Нам нет смысла дожидаться каждого пакета — ведь через долю секунды придет следующий, а значит нам важнее быстрее получать свежие данные чем гарантия доставки каждой крупицы информации.
С «голым» UDP работать сложновато, слишком много всего нужно реализовывать самому, начиная с формата данных, заканчивая handshake и прочими системными сообщениями. Есть готовые open-source-протоколы которые можно использовать.
Я обратил внимание на KCP. Он также умеет работать в режиме гарантии доставки (как TCP), что может пригодится для важных игровых событий вроде обновления статуса игровых объектов, применения поверапов или «попадания в цель».
К сожалению, unmanaged-реализации KCP под юнити я не нашел, но это не беда — я написал свою.
В качестве формата данных я взял FlatBuffers. Он поддерживает delta-сообщения а значит мы можем атомарно обновлять конкретные значения и не гонять по сети весь статус целиком.
В итоге любые изменения состояния шлются быстрыми короткими delta-пакетами, а раз в несколько секунд проводится полная синхронизация.
Мы получили молниеносный и стабильный способ синхронизации состояния с бэкендом, но к сожалению потеряли http-удобняшки вроде роутинга и oauth. Придется с этим как-то жить )
#devblog
Но TCP также несет определенный оверхед, который может быть вреден для получения данных перемещения NPC и других игроков.
Нам нет смысла дожидаться каждого пакета — ведь через долю секунды придет следующий, а значит нам важнее быстрее получать свежие данные чем гарантия доставки каждой крупицы информации.
С «голым» UDP работать сложновато, слишком много всего нужно реализовывать самому, начиная с формата данных, заканчивая handshake и прочими системными сообщениями. Есть готовые open-source-протоколы которые можно использовать.
Я обратил внимание на KCP. Он также умеет работать в режиме гарантии доставки (как TCP), что может пригодится для важных игровых событий вроде обновления статуса игровых объектов, применения поверапов или «попадания в цель».
К сожалению, unmanaged-реализации KCP под юнити я не нашел, но это не беда — я написал свою.
В качестве формата данных я взял FlatBuffers. Он поддерживает delta-сообщения а значит мы можем атомарно обновлять конкретные значения и не гонять по сети весь статус целиком.
В итоге любые изменения состояния шлются быстрыми короткими delta-пакетами, а раз в несколько секунд проводится полная синхронизация.
Мы получили молниеносный и стабильный способ синхронизации состояния с бэкендом, но к сожалению потеряли http-удобняшки вроде роутинга и oauth. Придется с этим как-то жить )
#devblog
🔥4
Наполнение биомов через детерменированный рандом используя принципы гильдий
Цикл приемки через визуальный анализ
На скриншотах LightForest
4 итерации, последнюю оставляем и переходим к следующему биому
#kitchensink
Цикл приемки через визуальный анализ
На скриншотах LightForest
4 итерации, последнюю оставляем и переходим к следующему биому
#kitchensink
🔥3👻1