![Page 1: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/1.jpg)
Удачные архитектурные решения игрового
backend-а для игр на Unity
Константин Черник[email protected]
![Page 2: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/2.jpg)
Обо мне и о том, кто сегодня в зале
![Page 3: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/3.jpg)
План выступления
• Возможности нашего серверного решения
• Взгляд на технологии• Наиболее удачные решения• Вопросы
![Page 4: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/4.jpg)
Возможности серверного решения
![Page 5: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/5.jpg)
Основные возможности
• Сокетный транспорт на protobuf• Использование Rest api• Поддержка разных версий протоколов• Симулятор сообщений для клиента и сервера• Переиспользование модулей разными проектами без
изменения кода• Нагрузочное тестирование• Backend могут делать unity разработчики
![Page 6: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/6.jpg)
Решение не идеальное, но рассказать есть о чём!
![Page 7: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/7.jpg)
Взгляд на технологии
![Page 8: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/8.jpg)
Технологии
LinqTPLOWin & Katana Task parallel library Language-Integrated
Query
![Page 9: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/9.jpg)
Проблема Protobuf на iOs
Protobuf имеет проблему на iOs из-за кодогенерации.
Мы решили эту проблему, за инструкциями обращайтесь ко мне[email protected]
![Page 10: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/10.jpg)
Наиболее удачные решения
![Page 11: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/11.jpg)
1.Сообщение в инспекторе
• Все полученные и отправленные сообщения можно сохранить в инспекторе
• Можно менять поля не меняя код• Можно создавать сообщения, сохранять их и
использовать в будущем• Можно создавать целые сценарии взаимодействия• Просто реализовать (SerializeField)
![Page 12: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/12.jpg)
1.Сообщение в инспекторе
![Page 13: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/13.jpg)
2.Транспортная организация
• Поведение транспорта полностью инкапсулирован в GameObject
• 2 вида транспорта, локальный и соккетный
• Лёгкая эмуляция поведения клиента и сервера
• Удобные контейнеры для сообщений
![Page 14: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/14.jpg)
2.Соккетный транспорт
• input_history_container – история сообщений от сервера
• output_history_container – история сообщений от клиента
• output_instant_object – моментальная посылка сообщения на сервер перетаскиванием объекта в дети
![Page 15: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/15.jpg)
2.Локальный транспорт
• input_history_container и output_history_container – повторяют соккетное поведение
• input_instant_object – моментальная отправка сообщения на клиент перетаскиванием настроенного GameObject-а в дети
• predefined_input_container – настройка сценариев ответов “сервера”на клиентские запросы
![Page 16: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/16.jpg)
2.Транспортная организация
![Page 17: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/17.jpg)
2.История сообщений
![Page 18: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/18.jpg)
3.Версионность протоколов
• Проблема версионности• Возможные пути решения• Что такое протокол в контексте
нашего серверного решения• Подход к версионности, который
выбрали мы
![Page 19: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/19.jpg)
3.Версионность протоколов
• Каждый протокол в отдельном .proto файле• Версия протокола содержится в namespace
(Protocols.Login.v1) и в имени .proto файла (login.v1.proto)• Сервер может поддерживать разные версии одного
протокола• Клиент может работать с любыми версиями протоколов,
которые поддерживает сервер• Клиент может работать с любым подмножеством
протоколов, поддерживаемым сервером• Протоколы развиваются независимо друг от друга
![Page 20: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/20.jpg)
3.Настройка версий на клиенте
![Page 21: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/21.jpg)
4.Объект сессии
Мотивация появления
![Page 22: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/22.jpg)
4.Объект сессии
• Данные о состоянии пользователя приходят в каждый обработчик
• Интерфейс объекта сессии и компонента сессии полностью повторяют GameObject и Component (добавление, удаление, проверка наличия, получение)
• Данные имеют композитную структуру, удобно добавлять новые и удалять старые компаненты
• Реализован аналог RequireComponent на обработчиках сообщений
![Page 23: Well-executed architecture decisions for game backend on Unity](https://reader033.vdocuments.site/reader033/viewer/2022042604/589fd5041a28abf06d8b5bd5/html5/thumbnails/23.jpg)
4.Плюсы объекта сессии
• Объект сессии понятен unity разработчикам
• Легко добавлять и удалять компоненты
• Все данные о сессии в одном месте
• Композитная структура, легко расширяема