company_banner
  • Как мы замахнулись на мобильный fast paced шутер: технологии и подходы



      Год назад у нас в компании был один проект — мобильный шутер War Robots с относительно медленными, но красочными и напряженными боями. Игра продолжает развиваться, у нее десятки миллионов установок и игроков по всему миру, постоянно выходят апдейты. В какой-то момент мы захотели сделать динамичный шутер на Unity со скоростями, сравнимыми с Overwatch, CS:GO или Quake. Но реализовать задуманное для мобильных платформ (в первую очередь iOS и Android) на основе War Robots при текущих архитектуре и подходах было практически нереально.

      Мы понимали, как это сделать в теории — есть много статей, презентаций на YouTube, детально рассказывающих о том, как написать шутер, как работать с сетью, какие возникают проблемы и как их решать. Здесь нет Rocket Science, все эти подходы придумали еще 30 лет назад и за это время они особо не поменялись. НО: у нас не было практики.

      Забегая вперед, скажу — нам удалось реализовать задуманное. Мы создали для мобильных платформ динамичный быстрый шутер, который сейчас находится в бета-тестировании и активно дорабатывается. И мне очень хотелось бы всем этим поделиться. Это первая, обзорная статья с перечислением и кратким описанием практически всего того, что мы используем (прошу не путать с другим нашим проектом в разработке, технологии и подходы в котором похожие, но отличаются в деталях).
      Читать дальше →
    • Дневник техлида: вторые полгода разработки нового мобильного PvP



        Я лид команды в Pixonic, где работаю уже год. О старте и развитии одного из наших новых проектов я ранее написал статью на Хабре. По ходу дальнейшего производства, спустя еще полгода, у меня накопилось большое количество интересного опыта, которым хотел опять поделиться. На этот раз речь пойдет о процессе наращивания функционала в мобильном клиенте и поддержании кода в гибком состоянии.

        Уверен, подавляющее большинство хотя бы раз запускали какую-нибудь многопользовательскую игру. На старте клиент, как правило, пишет несколько магических сообщений и через несколько секунд (хотя в случае с одним известным десктопным шутером — несколько минут) игрок попадает в главное меню, где есть заветная кнопка «В бой» или типа того. Но процесс запуска состоит из огромного количества этапов, которые происходят очень быстро и без вмешательства игрока:
        Читать дальше →
        • +31
        • 9,5k
        • 2
      • Пишем плагин для Unity правильно. Часть 2: Android



          В предыдущей части мы рассмотрели основные проблемы написания нативных плагинов на Unity под iOS и Android, а также методы их решения для iOS. В этой статье я опишу основные рецепты по решению этих проблем для Android, стараясь сохранить схожую структуру взаимодействия и порядок их рассмотрения.
          Читать дальше →
          • +23
          • 6,5k
          • 1
        • Пишем плагин для Unity правильно. Часть 1: iOS



            Когда делаешь на Unity игры для мобильных платформ, рано или поздно придется писать часть функционала на нативном языке платформы, будь то iOS (Objective C или Swift) или Android (Java, Kotlin). Это может быть свой код или интеграция сторонней библиотеки, сама установка может заключаться в копировании файлов или распаковки unitypackage, не суть. Итог этой интеграции всегда один: добавляются библиотеки с нативным кодом (.jar, .aar, .framework, .a, .mm), скрипты на C# (для фасада к нативному коду) и Game Object со специфичным MonoBehavior для отлавливания событий движка и взаимодействия со сценой. А еще часто требуется включать библиотеки зависимостей, которые нужны для работы нативной части.

            Весь этот механизм интеграции обычно не вызывает проблем на чистом проекте, в котором еще нет (или мало) интеграций таких сторонних библиотек. Но когда проект разрастается, всплывает много проблем, усложняющих этот процесс, а часто дающих необходимость дополнительных модификаций и адаптирования под проект плагина, что потом выливается в увеличении сложности последующей поддержки и обновления.
            Читать дальше →
            • +25
            • 7,6k
            • 3
          • От установки AWX до запуска первого плейбука — настройка централизованного управления Ansible

            • Tutorial


            Количество серверов в нашей инфраструктуре уже перевалило за 800, хотя еще год назад их было около 500. Для работы с этим всем активно используются решения от Red Hat. Про FreeIPA — для организации и управления доступами для Linux-серверов — мы уже писали, сейчас же я хочу затронуть тему управления конфигурациями. Для этих целей у нас юзается Ansible, а с недавних пор к нему добавился AWX — представленное полгода назад решение для централизованного управления плейбуками, расписанием их запусков, управления инвентори, учетными данными для доступа к серверам, а также механизм callback'ов для запроса конфигураций со стороны сервера.

            Из-за ряда вещей мы не сразу смогли интегрировать его для работы с нашим основным проектом War Robots, но полей для проверки AWX нашлось предостаточно. Во-первых, в компании ведутся разработки новых проектов, которым нужны dev/stage-окружения и, само собой, production-окружения в перспективе. А недавно к этому добавился еще и проект для внутренней аналитики, которому потребовался полностью новый кластер.

            Итак, начнём!
            Читать дальше →
          • Как адаптировать игру на Unity под iPhone X к апрелю



              Месяц назад Apple предупредила всех разработчиков, что с апреля все приложения, которые заливаются в App Store, должны быть собраны с использованием последнего iOS 11 SDK. О том, как правильно позиционировать контент, используя новый API, уже давно можно почитать в официальной документации и Human Interface Guidelines. А хорошими и подробными статьями об адаптации игр на Unity ни на русском, ни на английском языке нас не радуют. А так как в War Robots поддержка нового UI появилась с февральским релизом версии 3.6.0, я решил написать собственный гайд со скриптами и скриншотами.
              Читать дальше →
              • +31
              • 10,7k
              • 8
            • Помните бесконечное «Давайте Dust 2!» в каждом CS-чате? Реиграбельность — важнейшая черта для онлайн-шутеров. Игрокам раз за разом приходится возвращаться на одни и те же локации, поэтому можно смело сказать, что работа левел-дизайнера не менее важна для проекта, чем код, на котором он написан. Нужно продумать баланс карты во всех ее точках; помнить о разных тактиках игроков и целых команд; расставить достаточное количество укрытий; не забыть о «снайперах»; провести ряд внутренних и внешних тестов; учесть пожелания игроков касательно сеттинга и визуала. И думаем, не только нам интересно, как можно решить все эти задачи.
              Подробности – под катом
            • How-to: смена основного домена в G Suite для всей компании и с сохранением всех данных

              • Tutorial


              Появилась необходимость сменить основной домен компании в G Suite с .ru на .com с сохранением всех данных, календарей, псевдонимов и доступов на сторонние ресурсы. Информации о переезде в интернете не очень много, а точнее, кроме справки самого Google, вообще ничего не нашлось, что и стало причиной создания этого how-to. Будет полезно, если кто-то решит повторить подобное.

              Дело в том, что изначально в компании использовался домен pixonic.ru. Затем был добавлен псевдоним pixonic.com, но везде по умолчанию стояла почта в зоне .ru. А так как многие сотрудники компании ведут переписку с зарубежными коллегами и клиентами, было желание использовать международный формат. Для этого им приходилось заходить в настройки аккаунта, самостоятельно менять основной почтовый адрес и приводить подпись в соответствие с корпоративным шаблоном. Не все это делали (или делали, но через раз) и можно представить, какой беспорядок и путаница творились в ветках сообщений. Для внешних партнеров это выглядело еще менее презентабельно из-за разных подписей.

              В общем, настал момент, когда было решено — вся переписка должна вестись с использованием почты pixonic.com. Задача упала на нас — системных администраторов.

              В конце статьи есть ссылка на весь скрипт, поэтому в тексте будут лишь его куски.
              Читать дальше →
            • Создаем концепт игры без навыков программирования: как мы проводили первый PixJam в компании



                — А у тебя какая идея игры?
                — Хочу, чтобы все офигели, передать ощущение скорости, которая нарастает, пока у тебя мясо от костей не начнёт отлетать, и ты уже не понимаешь, сможешь ли с ней совладать, но все равно продолжаешь пушить как сумасшедший!
                — Матч-3 что ли?
                — Ага.

                Из разговоров на PixJam.
                Провели внутри компании первый Jam по созданию концепций новых игр и хотим поделиться впечатлениями. Идея заключалась в том, чтобы раздвинуть рамки и «заразить» креативом как можно больше сотрудников (в независимости от скилла в программировании или гейм-дизайне). Идея провести подобное мероприятие в формате Jam'a возникла у Игоря Клюкина — нашего СОО. Как показывает практика, такой формат в целом хорошо подходит для решения креативных задач.

                Прототипы не делали, была задача передать впечатление от игры, когда видишь ее в мобильном сторе первый раз в жизни. Поэтому на выходе команды показали странички концептов, используя только арт (любой) и описание. Голосовать надо было за те игры, которые вызывают желание немедленно её запустить.

                Для финалистов мы привлечем маркетологов, проведем реальное исследование и узнаем, насколько их идеи окажутся востребованы. Тогда уже можно будет браться за разработку.
                Читать дальше →
              • «Ура, нас зафичерили!» или Как сменить дата-центр под нагрузкой и без даунтаймов, когда всё летит к чертям



                  Пару лет назад мы располагались в самом cost-effective (читай: «дешевом») дата-центре в Германии. Чтобы вы понимали условия — роутинг мог сбоить от стойки к стойке или внутри неё; свитч в стойке перегружался или зависал; сам дата-центр постоянно ддосили; жесткие диски выходили из строя; материнские платы и сетевые карты сгорали; сервера произвольно выключались, перезагружались, а сетевые кабели выпадали как осенние листья во время урагана.

                  Периодически, когда приходило время скейлиться горизонтально, в ДЦ еще и место заканчивалось, и нам предлагали другую локацию, в другом городе, что для наших условий (ограничения схемы данных, топология кластера и критичность времени ожидания клиента) было неприемлемо.

                  Наступила точка кипения и мы решили переезжать. Хотя в какой-то момент даже казалось, что дешевле нанять больше обслуживающего персонала, чтобы менеджерить ситуации в вышеупомянутом ДЦ. Но в итоге, чтобы «стало более лучше жить» — мы выбрали стабильность.
                  Выбор остановился на дата-центре в Голландии, в Амстердаме. А вот тут самое интересное: к тому времени у игры уже был приличный DAU, переезд нужно было осуществить онлайн, без даунтаймов, одновременно на обе платформы (Android и iOS). Мало того, мы получили фичеринг на Google Play, маркетинг еще и запустил рекламную кампанию. Как понимаете, дополнительного трафика стало очень и очень много.

                  В общем, задачка не самая обыденная и вот как мы с ней справлялись.
                  Читать дальше →
                • Навыки, инструменты, требования — масштабное исследование HackerRank о рынке разработчиков 2018

                  • Перевод


                  HackerRank в этом месяце предоставили интересную аналитику на основе опроса 39 441 разработчика. В опросе поднимается много актуальных вопросов про состояние IT-рынка, востребованные качества среди разработчиков и то, что ищут программисты среди потенциальных работодателей. Отчет получился интересным, многим может быть полезно.

                  Под катом очень много картинок.

                  1. Пролог

                  Hello world


                  В будущем то, как мы все работаем, изменится. Кем бы вы ни работали, для каждого важно научиться программированию, ведь именно оно развивает вычислительное мышление (или computational thinking), которое играет важную роль в принятии решений. Обычные резюме уйдут в прошлое и на первый план в вопросах найма новых сотрудников выйдут именно их умения.

                  Мы запустили HackerRank в конце 2012, чтобы помогать разработчикам найти работу, которая будет им по душе. За эти годы мы сильно выросли — сейчас в нашем сообществе 3,2 млн человек и 2% всех новых наймов разработчиков в прошлом году были сделаны с нашей помощью.

                  И сейчас мы впервые провели опрос среди нашего сообщества разработчиков, чтобы разобраться в том, как именно они работают и как они этому научились: когда они впервые запушили код в репозиторий, как они научились кодить, расспросили о любимых языках программирования и фреймворках, узнали, чего они хотят от работодателей. А еще мы спросили HR-менеджеров о том, что именно они ищут в кандидатах на позиции разработчиков и о многом другом. Мы опросили 39 441 человека и готовы поделиться знаниями, которые получили в результате.

                  Вы знали, что 1 из 4 разработчиков научился кодить до того, как получил водительские права?

                  Надеемся, что наш доклад будет для вас полезным.

                  Вивек Равинскар, Co-founder/CEO HackerRank
                  Читать дальше →
                • Почему мы не стали делать идеально: как менялась инфраструктура серверов War Robots



                    Первый прототип (например, игры в новой для вас нише) часто делается «на коленке» из палок и самизнаетечего. Причем палки, как правило, тоже из этого самизнаетечего. И на то есть несколько причин.

                    Во-первых, от неудачной идеи будет не так жалко отказаться. А во-вторых, в погоне за перфекционизмом можно забыть о потребностях конечных пользователей или никогда не закончить работу даже над альфа-версией. Но что, если в вашу «глиняную» повозку стало набираться так много людей, что перестраивать её на ходу уже не кажется такой привлекательной идеей? Примерно это с нами и случилось.

                    Забегу вперед и расскажу, что сейчас DAU в наших проектах около 1,5 млн. Но так было не всегда.
                    Читать дальше →
                  • Дневник техлида: полгода разработки мобильного PvP



                      В марте 2017 года мы собрали небольшую команду и взялись за разработку нового перспективного проекта. Без особых деталей могу сказать, что задача стояла интересная и соблазнительная — мобильный, синхронный, командный PvP. Спустя 7 месяцев активной разработки мне захотелось рассказать коллегам из других проектов и отделов Pixonic технические детали и я подготовил для них презентацию, которая в дальнейшем превратилась в эту статью.

                      Как техлид команды, я расскажу, с какими задачами и проблемами мы успели столкнуться, как их решаем и почему. Мы используем итеративный подход добавления функционала в проект и в данный момент у нас реализованы: PvP на iOS и Android (обе платформы играют на одних серверах); набор персонажей, три десятка игровых механик, боты; матчмейкинг; набор мета-фич (кастомизация персонажей, прокачка и другие); решена задача масштабируемости на весь мир.

                      Итак, поехали.
                      Читать дальше →
                    • Как расправиться с читерами и не переписать весь код



                        Несколько лет назад появился прототип игры War Robots (тогда она еще называлась Walking War Robots). Это был первый опыт Pixonic в жанре тактического PvP, поэтому многие будущие проблемы были заложены в коде изначально. Но несмотря на ряд трудностей (популярность проекта стремительно росла, небольшая команда не могла полностью изменить архитектуру игры в краткие сроки), нам в итоге удалось свести к минимуму количество читеров, а также исправить другие недостатки оригинального кода. Расскажу немного подробнее.
                        Читать дальше →
                      • Пошаговая настройка Graylog2

                        • Tutorial


                        В первой статье этого цикла я рассказал, как и почему мы выбрали опенсорсный Graylog2 для централизованного сбора и просмотра логов в компании. В этот раз я поделюсь, как мы разворачивали грейлог в production, и с какими столкнулись проблемами.

                        Напомню, кластер будет размещаться на площадке хостера, логи будут собираться со всего мира по TCP, а среднее количество логов — около 1,2 Тб/день при нормальных условиях.

                        В настоящее время мы используем CentOS 7 и Graylog 2.2, поэтому все конфигурации и опции будут описываться исключительно для этих версий (в Graylog 2.2 и Graylog 2.3 ряд опций отличается).
                        Читать дальше →
                      • Как мы Graylog2 выбирали



                          Перед каждым относительно крупным продакшном рано или поздно встает вопрос о централизованном сборе и просмотре логов. В настоящее время имеется огромный выбор опенсорсных, платных, online и on-premises решений. Я же постараюсь изложить процесс выбора в нашем конкретном случае.

                          Эта обзорная статья, суть которой рассказать об основных особенностях Graylog2, почему мы выбрали именно его и как эксплуатируем.
                          Читать дальше →
                        • Набор полезных советов для эффективного использования FreeIPA



                            В процессе эксплуатации FreeIPA часто возникают нетривиальные задачи, которые упираются в не очень хорошо документированные или не полностью реализованные места. Поэтому я решил дополнить свою предыдущую статью некоторыми решениями, которые помогут сэкономить вам немного времени.

                            Содержание:

                            1. FreeIPA агенте в lxc контейнерах
                            2. Библиотека для использования API в python
                            3. Несколько слов про Ansible модули
                            4. FreeIPA агент в debian
                            5. Реплика в Амазоне

                            Читать дальше →
                          • Монетизация приложений в iOS 11: таргетируем встроенные покупки в новом App Store



                              На WWDC’17 Apple показала обновленный интерфейс App Store и представила ряд нововведений. Среди них были продвигаемые встроенные покупки, которые с выходом iOS 11 будут выводится прямо в поиске и редакторских подборках наряду с приложениями.

                              В нашем случае это особенно актуальная вещь, так как в текущем проекте War Robots мы используем встроенные покупки, которые для нас стали самым оптимальным способом монетизации. Поэтому в нескольких новых играх, которые сейчас в разработке, мы также собираемся их использовать.
                              Читать дальше →
                              • +13
                              • 8,1k
                              • 5
                            • Автооптимизация виртуальной реальности или В чем разница между репроекцией, timewarp и spacewarp



                                Оптимизация проектов для виртуальной реальности требует своего особенного подхода. Помимо общих вещей, на которые следует обращать внимание при разработке 3D-игр, VR накладывает ряд строгих ограничений. От любого приложения требуется не только практически мгновенный отклик на любое движение игрока (будь то поворот головы или взмах руки), но и обеспечение стабильной частоты кадров, намного превышающей стандартные требования к «классическим» играм любого жанра.

                                Современные шлемы, такие как Oculus Rift и HTC Vive, поддерживают ряд специальных технологий, которые призваны сглаживать падения производительности. Это должно позволить компенсировать проседания FPS, искусственно повышая частоту кадров; улучшить пользовательский опыт; предоставить немного дополнительной свободы разработчикам конечных продуктов и снизить минимальные системные требования. Но так ли прекрасно все оказывается на практике? Как работают эти технологии и в чем между ними разница? Об этом и пойдет речь в настоящей статье.
                                Читать дальше →
                                • +24
                                • 5,2k
                                • 3
                              • Про PKI «на пальцах» за 10 минут



                                  Предложил коллегам провести внутреннюю мини-лекцию по сабжу — идея зашла. Сел писать план лекции и… чот психанул — в итоге очнулся, дописывая небольшой гайд. Подумал, что будет полезно добавить сюда что-то для быстрого понимания, что такое PKI, зачем она нужна и как работает, так как пока готовился, чтобы освежить память, искал информацию в том числе на полюбившемся «Хабрахабре», но статей в таком формате не нашел.

                                  Пишу на примере наших повседневных задач, которые знакомы многим: беспарольный доступ к серверам OpenVPN и защита доступа к ресурсам с помощью HTTPS.
                                  Читать дальше →

                                Самое читаемое