Renovation - подход к организации проекта. Часть 2
Вторая часть нашей статьи об организации проекта. На этот раз - об инфраструктуре.
Сервер
В нашей разработке мы используем выделенный сервер.
В 2020 кому-то этот подход может показаться устаревшим. И если у вас нет в команде человека, который на "ты" с Unix-консолью - это действительно так. Но у нас такой человек, к счастью, есть.
И в нашем случае это развязывает руки. Многое из написанного ниже становится возможным только с использованием отдельного сервера.
Если вы пойдете по этому тернистому пути - вот самый важный совет: используйте Docker. Без него все теряет смысл. Вы действительно убьете больше времени на настройку нужных вам вещей, чем на разработку игры. Но потратив один день и разобравшись с докером - сервисы любой сложности можно будет раскатить буквально в пару строчек кода.
Вопреки распространенному мнению, хорошо поставленный сервер не падает и легко держит на своих плечах всех разработчиков.
16G Core i5-750 1x2TB Server нам обходится в 16 €/месяц, и оно того стоит. Такой конфигурации нам сейчас хватает с головой.
Вдохновение
В целом, если вы серьезно задумываетесь о создании собственной студии, лучше сразу подумать о процессах, которые помогут вам не заглохнуть на полпути. Очень советуем посмотреть это видео - прекрасная пища для мозга!
Если вы считаете, что ваша команда слишком маленькая, чтобы думать о таких вещах - все равно посмотрите. Там речь идет о студии ~5 человек.
Как сделать счастливыми программистов (SVN)...
Место для начала холивара
Давайте сразу понизим градус беседы. Наши программисты любят Git, умеют в Git и практикуют Git. Git - прекрасная распределенная система управления версий. И именно поэтому - это не лучший выбор для проекта на Unity.
Вы когда-нибудь резолвили конфликты в сценах и префабах? Сколько из вас сдалось, так и не добившись приемлемого результата?
SVN - это централизованная система. И она поддерживает очень удобную фичу - File Locking. Если у файла установлен атрибут svn:needs-lock, несколько человек не смогут изменять его параллельно. Это решает проблему конфликтов на корню. А svn:auto-props поможет вам настроить автоматическое применение этого атрибута к сценам и префабам.
Подробности тут и тут.
При грамотном подходе к организации сцен, это не мешает работать над ними художникам и геймдизайнерам одновременно. Разбивайте все на префабы по функциональному и логическому принципу, используйте новый Unity Prefab Workflow и Nested Prefabs. И все должно быть хорошо.
Для связи между префабами очень советуем применять подход, описанный в этом видео. В конечном итоге он позволяет получать изолированные, самодостаточные "модули", которые легко редактируются независимо друг от друга.
Возможность делать локи и избегать неразрешаемых конфликтов - ключевая причина, почему мы выбрали SVN, а не Git.
Хостинг
Как можно было догадаться, мы хостим свои репозитории самостоятельно. В мире SVN нет игроков уровня GitHub или GitLab. Увы. Но у нас есть свой сервер! А значит, поднять хост можно без особого труда.
Для управления репозиториями и пользователями мы используем очень минималистичную тулзу submin. Она прекрасно справляется со своими задачами. Мы даем ссылку на файл для Docker Compose, который позволяет поднять у себя SVN одной командой. (Только не забудьте поменять параметры и настроить маршрутизацию к контейнеру)
... и художников (Seafile)
В принципе, проблема обмена файлами уже давно решена. DropBox, Google Drive, etc. Но наверное каждый сталкивался с какими-то мелкими (или даже крупными) проблемами с этими сервисами. Мы опять решили попробовать найти лучший вариант для Renovation. И наш выбор упал на Seafile.
Нас привлекло в нем несколько вещей. Первое - это self-hosting. На самом деле, мы, по ощущениям, уже экономим деньги, не переплачивая за место для кода и арта на сторонних хранилищах.
Второе - это возможность использовать Seafile Drive: версию клиента, который монтируется в систему как отдельный диск. В итоге обмен файлами происходит словно по волшебству. Где-то в Питере наша художница нажимает Ctrl-S, и вскоре новая версия PSD оказывается у всей команды прямо на "диске" без каких-то дополнительных телодвижений.
Добавьте к этому бонусы типа хранения истории изменений файлов (да, это работает как VCS с человеческим лицом), возможность давать доступ к отдельным файлам по публичной ссылке, удобный веб-интерфейс, мобильные клиенты. Мы очень довольны тем, как работает Seafile!
Перед окончательным выбором между всеми доступными вариантами, мы измерили скорость передачи файлов нашего Seafile, и сравнили его с GoogleDrive и DropBox. В нашем случае Seafile работает быстрее. Думаю, это из-за того, что сейчас им пользуется всего три человека. Но даже когда нас будет 10, мы рассчитываем на более быстрый и надежный обмен файлами.
Docker Compose для Seafile у нас тоже есть:
CI
Continuous Integration - очень хорошая методология, у нашей команды уже есть позитивный опыт работы по ней.
Сейчас мы только планируем внедрять CI для Renovation. О наших планах на этот счет скорее всего выйдет отдельная статья. Они по-настоящему наполеоновские.
По опыту прошлых проектов, CI дает уверенность в завтрашнем дне) В каждый момент времени вы знаете, что ваша игра собирается без ошибок. А даже простейшие тесты дают гарантии, что проект находится во вменяемом состоянии.
Наш выбор по дефолту - это Jenkins. Он проверен поколениями разработчиков и никогда нас серьезно не подводил.
Бэкапы
Вы не делаете бэкапы? Тогда северный лис уже идет к вам.
Возможность легко организовать бэкапы - еще один плюс в пользу выделенного сервера. Мы стараемся, чтобы все материалы игры хранились как минимум на двух машинах. Чаще всего это сервер и компьютер разработчика.
Мы бэкапим даже документы из Google Drive. Для кого-то это уже признак паранойи. Но возможно вы просто не знаете о случаях, когда люди неожиданно теряли все доступы из-за действий злоумышленников или ошибок Гугла.
Бэкапы приходится делать по-старинке скриптами. Кажется, существуют какие-то более комплексные решения для этой задачи, но мы серьезно ими не интересовались. Если у вас есть позитивный опыт их использования - поделитесь с нами в комментариях.
Кстати, Seafile оказался очень удобным хранилищем для бэкапов документов. В случае аварийной ситуации все материалы по игре будут доступны через наш собственный сервер.
Бэкапы - это надежный сон для всей команды.
На этом сегодня все.
Если вам что-то показалось сложным, то смею заверить - это не так. Сейчас инфраструктуру поддерживает один человек, и она работает четко и без сбоев. Да, это определенная инвестиция времени, но в нашем случае она окупается.
Но не стоит повторять этого дома, если у вас нету человека, который хорошо разбирается в подобных вопросах. Вокруг есть сотни готовых решений, и они сильно упростят вам жизнь и помогут добиться аналогичных результатов. Мы же предпочитаем больше контроля над нашими процессами и данными.
Надеемся, что любая команда сможет перенять какие-то общие принципы и доработать их под себя.
Особенно задумайтесь над бэкапами. Серьезно. Вот прямо сейчас.
Спасибо за внимание!
Наши прошлые статьи для фестиваля:
Наши ссылки: