well-executed architecture decisions for game backend on unity

24
Удачные архитектурные решения игрового backend-а для игр на Unity Константин Черник [email protected]

Upload: devgamm-conference

Post on 12-Feb-2017

357 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Well-executed architecture decisions for game backend on Unity

Удачные архитектурные решения игрового

backend-а для игр на Unity

Константин Черник[email protected]

Page 2: Well-executed architecture decisions for game backend on Unity

Обо мне и о том, кто сегодня в зале

Page 3: Well-executed architecture decisions for game backend on Unity

План выступления

• Возможности нашего серверного решения

• Взгляд на технологии• Наиболее удачные решения• Вопросы

Page 4: Well-executed architecture decisions for game backend on Unity

Возможности серверного решения

Page 5: Well-executed architecture decisions for game backend on Unity

Основные возможности

• Сокетный транспорт на protobuf• Использование Rest api• Поддержка разных версий протоколов• Симулятор сообщений для клиента и сервера• Переиспользование модулей разными проектами без

изменения кода• Нагрузочное тестирование• Backend могут делать unity разработчики

Page 6: Well-executed architecture decisions for game backend on Unity

Решение не идеальное, но рассказать есть о чём!

Page 7: Well-executed architecture decisions for game backend on Unity

Взгляд на технологии

Page 8: Well-executed architecture decisions for game backend on Unity

Технологии

LinqTPLOWin & Katana Task parallel library Language-Integrated

Query

Page 9: Well-executed architecture decisions for game backend on Unity

Проблема Protobuf на iOs

Protobuf имеет проблему на iOs из-за кодогенерации.

Мы решили эту проблему, за инструкциями обращайтесь ко мне[email protected]

Page 10: Well-executed architecture decisions for game backend on Unity

Наиболее удачные решения

Page 11: Well-executed architecture decisions for game backend on Unity

1.Сообщение в инспекторе

• Все полученные и отправленные сообщения можно сохранить в инспекторе

• Можно менять поля не меняя код• Можно создавать сообщения, сохранять их и

использовать в будущем• Можно создавать целые сценарии взаимодействия• Просто реализовать (SerializeField)

Page 12: Well-executed architecture decisions for game backend on Unity

1.Сообщение в инспекторе

Page 13: Well-executed architecture decisions for game backend on Unity

2.Транспортная организация

• Поведение транспорта полностью инкапсулирован в GameObject

• 2 вида транспорта, локальный и соккетный

• Лёгкая эмуляция поведения клиента и сервера

• Удобные контейнеры для сообщений

Page 14: Well-executed architecture decisions for game backend on Unity

2.Соккетный транспорт

• input_history_container – история сообщений от сервера

• output_history_container – история сообщений от клиента

• output_instant_object – моментальная посылка сообщения на сервер перетаскиванием объекта в дети

Page 15: Well-executed architecture decisions for game backend on Unity

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

2.Транспортная организация

Page 17: Well-executed architecture decisions for game backend on Unity

2.История сообщений

Page 18: Well-executed architecture decisions for game backend on Unity

3.Версионность протоколов

• Проблема версионности• Возможные пути решения• Что такое протокол в контексте

нашего серверного решения• Подход к версионности, который

выбрали мы

Page 19: Well-executed architecture decisions for game backend on Unity

3.Версионность протоколов

• Каждый протокол в отдельном .proto файле• Версия протокола содержится в namespace

(Protocols.Login.v1) и в имени .proto файла (login.v1.proto)• Сервер может поддерживать разные версии одного

протокола• Клиент может работать с любыми версиями протоколов,

которые поддерживает сервер• Клиент может работать с любым подмножеством

протоколов, поддерживаемым сервером• Протоколы развиваются независимо друг от друга

Page 20: Well-executed architecture decisions for game backend on Unity

3.Настройка версий на клиенте

Page 21: Well-executed architecture decisions for game backend on Unity

4.Объект сессии

Мотивация появления

Page 22: Well-executed architecture decisions for game backend on Unity

4.Объект сессии

• Данные о состоянии пользователя приходят в каждый обработчик

• Интерфейс объекта сессии и компонента сессии полностью повторяют GameObject и Component (добавление, удаление, проверка наличия, получение)

• Данные имеют композитную структуру, удобно добавлять новые и удалять старые компаненты

• Реализован аналог RequireComponent на обработчиках сообщений

Page 23: Well-executed architecture decisions for game backend on Unity

4.Плюсы объекта сессии

• Объект сессии понятен unity разработчикам

• Легко добавлять и удалять компоненты

• Все данные о сессии в одном месте

• Композитная структура, легко расширяема

Page 24: Well-executed architecture decisions for game backend on Unity

Заключение

Вопросы?Константин Черник

[email protected]