Кто такой AI Game Developer, что он делает и как им стать

Всем привет! Меня зовут Александр Пиндык, я Team Lead команды AI в киевской студии Wargaming. Мы с командой разрабатываем AI (Artificial Intelligence) для самой популярной видеоигры в Украине — World of Tanks. Игровой разработкой я занимаюсь более 10 лет. Я создавал игры для соцсетей, мобильные игры, а последние 4 года занимаюсь разработкой искусственного интеллекта для World of Tanks. Здесь я расскажу больше о профессии AI-разработчика в геймдеве (для AAA-проектов и не только), специфике его работы и о том, как им стать.

Для начала определимся, что такое AI. Если отойти от сухих определений из Wikipedia, то AI — это система, имитирующая поведение персонажа или игрока. В зависимости от того, какой жанр и какая цель у игры, используются разные технологии и подходы при разработке AI. Давайте рассмотрим основные типы игр и цели AI для них.

Игры, где цель AI — победа над человеком-игроком

Знакомые всем нам игры. Хорошим примерном здесь будут шахматы и Go. Это тот тип игр, в которых может применяться искусственный интеллект на основе нейронных сетей. Так как основная цель AI победить игрока во что бы то ни стало, у него нет необходимости имитировать поведение человека. Действия такого AI зачастую выглядят непонятно, а иногда даже пугающе неестественными, при этом уже сейчас человек не способен победить AI (AlphaZero) в те же шахматы и Go. Кроме этих двух классических игр, эксперименты с подобным подходом есть и в карточных играх по типу покера, и в соревновательных играх, таких как StarCraft и DOTA 2. Над созданием такого AI трудится немало ученых и программистов из Google и OpenAI. Чаще всего это облачные решения, в связи с тем, что необходимо достаточно много ресурсов для тренировки искусственного интеллекта.

В геймдеве такой подход не оправдан из-за сложности разработки и конфликта целей, для которых используется AI. В разработке игр обычно нет цели побеждать игрока любой ценой. И не стоит забывать о серверных мощностях. Этот вариант не подойдет для игр, у которых очень большой онлайн, а вот для демонстрации того, как мы хорошо научились побеждать человека в DOTA 2, как раз самое то. Ещё один недостаток такого подхода — необходимость тренировать AI заново после ввода новых механик.

PVP-игры

Это игры, основной цикл которых заключается в противостояние игроков (команд игроков) друг с другом (player versus player). Казалось бы, где здесь искусственный интеллект? Но есть несколько областей, где применяется AI в таких играх:

  • Боты для новичков. Они используются как в начальном обучении, так и могут становиться противниками на первых этапах игры. В случае если нет матчмейкера по навыкам игрока или когда не получается сбалансировать команды, боты позволяют плавно повышать уровень сложности для играющих. А также исключить частые проигрыши против игроков с гораздо лучшими навыками. Режим обучения с ботами применяется в таких играх, как World of Tanks и Hearthstone.
  • «Заселение» новых регионов и запуск проекта. Такой вариант использовался при запуске PUBG Mobile. Когда не получалось собрать команды из 100 человек, в бой докидывались боты. Electronic Arts недавно подтвердила, что в Battlefield 2042 в режиме на 128 бойцов будут использоваться боты, вплоть до 64 противников. В случае, когда сервер покрывает большую территорию с разными часовыми поясами, боты могут сгладить просадку по online для отдалённых регионов. Например, когда один сервер покрывает Европу и Азию.
  • Режим тренировки. Он часто нужен в играх, которые были выпущены уже давно и в которых много профи-игроков, против которых играть сложно без хорошей подготовки. К тому же такие игры не всегда разделяют новичков и профи в матчмейкере, и игра с ботами становиться чуть ли не единственным способом наработать навык. Хорошим примером здесь будет Escape from Tarkov. Играя с ботами, вы не сможете выполнить миссии, но при этом не теряете свою экипировку, изучаете уровень, отрабатываете комбинации снаряжения и навык стрельбы.

С точки зрения разработки для таких игр важно иметь возможность тонко настраивать сложность AI и дебажить логику принятия решений ботами. Сам же AI работает на сервере игры, а команда разработки реализует поведение ботов максимально похожим на поведение человека, который умеет хорошо играть. По крайней мере боты стараются быть похожими на таких игроков.

PVE-игры

Это игры, основной цикл которых проходит во взаимодействии игрока с окружением и AI (player versus environment). Это могут быть как чисто одиночные offline-игры (Witcher 3), так и online PVE (Genshin Impact), а также специальные события и режимы в PVP-играх (Мирный-13 на Хэллоуин в World of Tanks). В таких играх у AI нет цели победить игрока любой ценой. Даже наоборот. Как говорил один очень хороший геймдизайнер, главная цель у AI — красиво отдаться, чтобы человек-игрок смог получить положительные эмоции от победы.

При этом AI может использоваться как один из элементов настройки сложности игры. Балансируя между количеством врагов, их «толщиной» и умением играть, можно создать нужный уровень сложности и интереса для человека. Также, в зависимости от игры, будет повышаться или понижаться важность визуально логичного поведения AI-бота. В играх по типу Genshin Impact боты — это пушечное мясо, и игрок не всегда обращает внимание на то, насколько они логично себя ведут.

Ещё один вариант использование ботов — это простые союзники и способности игрока, например мобы в DOTA 2, которые достаточно примитивны и имеют всего одну цель — идти вперед и атаковать врага. В случае, когда игра одиночная и offline, AI чаще всего работает локально у игрока в клиенте. В случае игр по типу World of Tanks, AI и для PVE-режимов работает на сервере. Это необходимо, так как игра сетевая и все действия контролируются сервером.

В свою очередь, это накладывает ограничение на ресурсы CPU и RAM, которые может использовать AI. Одна из ключевых задач при разработке такого искусственного интеллекта — создать интересные поведенческие сценарии для ботов. Например, игроки должны добраться до позиции, защитить её на протяжении некоторого времени, а после, получив подкрепление, перейти в атаку и победить всех врагов.

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

Инструмент, помогающий в разработке игр

Кроме геймплея, искусственный интеллект используется при разработке игр. Здесь AI помогает сразу в нескольких областях:

  • Разработка и тестирование уровней. Например, боты могут пройти или проехать по всей карте и тем самым выявить непроходимые области, застревания и другие нюансы при разработке геометрии уровня.
  • Тестирование баланса уровня. Если проводить бои ботов друг против друга, то можно собрать статистику и понять, насколько хороши новые балансные правки уровня. Важное условие проведения такого теста — скил ботов. Для получения максимально релевантной статистики боты должны играть на уровне среднего игрока. Отсутствие необходимости в большой команде тестировщиков уровня сильно ускоряет процесс полировки баланса.
  • Тестирование новых предметов и навыков. Боты могут использоваться разработчиком как тестовые противники при создании нового оборудования, предметов и прочего в игре. Например, вводя новую винтовку, можно добавить ботов на карту и проверить, хорошо ли она выполняет свою задачу.
  • Функциональное и нагрузочное тестирование. AI помогает проводить тестирование разных компонентов игры и даже тестировать саму себя. Например, можно создать сценарий, в котором бот из каждого вида оружия будет стрелять по всем поверхностям и собирать статистику, какая поверхность и как пробивается, наносится ли урон противнику за поверхностью. Можно проводить нагрузочное тестирование клиента. Отправить ботов гулять по всей карте и смотреть, есть ли падения FPS или даже всей игры. А для сервера можно проводить нагрузочное тестирование и тем самым проверить, как будет вести себя сервер во время «неожиданных» пиков по нагрузке.

Как работает AI в играх

Мы рассмотрели, для чего используется AI в геймдеве, а сейчас разберем, как он работает и какие применяются подходы при его разработке. Для реализации своих целей AI работает по циклу: сбор информации → принятие решения → действие. В английском варианте этот цикл описывается тремя словами: Sense → Think → Act. Каждый раз, когда появляется новая информация об окружении, не получается принять решение или же завершается/прерывается выполнение действия, AI заходит на новый виток цикла Sense → Think → Act.

Рассмотрим каждый из основных шагов цикла действий AI.

Сбор информации (Sense). Первый шаг. Для того чтобы принять какое-либо решение, AI (агент или бот) собирает информацию об окружающей обстановке. Например, это может быть информация о противниках и союзниках. Их позиции, состояние, снаряжение и так далее.

Принятие решения (Think). Следующий шаг — это самая сложная и ресурсоёмкая часть AI. Так как на этом этапе происходит обработка и анализ всей информации, которую собрал AI-агент. В зависимости от выборного принципа принятия решений будет возрастать сложность вычислений и точность результата. Рассмотрим основные подходы к принятию решений:

1. Decision Trees. В шутку его можно назвать «if» driven development. Самый простой способ построение AI, так как создается большое количество проверок «если — то». Его также можно назвать способом, моментально реагирующим на внешние события. Из таких проверок создается дерево, по узлам которого проходит AI-агент, пока не находит узел, в котором будет действие. Из-за своей простоты и громоздкости не подходит для создания AI в более-менее сложных играх. Обычно шаги сбора информации и анализа совмещены в один блок и обычно являются условием проверки «if». В таком подходе, если результат проверки будет «False», то возможен как переход к следующей проверке, так и выполнение действия.

2. Finite state machine (конечный автомат). Это вариант, когда AI-агент находится в одном из возможных состояний и у него есть информация, в какое из состояний он может перейти. Например, бот был в состоянии патрулирования. Из него он может перейти в состояние атаки врага или отступления. Выбор, в какое состояние перейти, может зависеть от того, сколько у бота очков жизни и какое соотношение союзники/враги в радиусе Х метров. Количество состояний и условий перехода не ограничено. Каждый новый цикл обновления состояния, а обычно это каждый кадр (иногда для оптимизации потребления ресурсов, пересчет условий перехода происходит реже), делается проверка условий перехода в каждое из состояний. И если условия выполняются, активируется переход. Преимущество данного подхода в том, что у нас есть четкая логика перехода по состояниям.

3. Utility System. Система, основанная на оценке полезности того или иного действия/перехода. Логика в том, что у AI-агента есть набор действий и он сам выбирает, какое будет выполнять, в зависимости от текущей ситуации на поле боя, от заложенных коэффициентов приоритета выполнения действия или перехода из одного состояния в другое. Например, есть бот, который встретил противника, патрулируя местность. Допустим, для этого бота более важным будет не атаковать врага, а скрываться, поднять тревогу и звать на помощь других ботов. В таком случае у него коэффициент на избегание прямого столкновения будет выше желания атаковать врага. И если у бота нет критического преимущества перед противником, он не выберет ветку поведения, связанную с атакой.

4. Behavior Trees. Это удобная надстройка над стейт-машинами. Она позволяет вынести управление состояниями за сами автоматы. Тем самым мы можем создать дерево условий, по которым будем переключать стейт-машины для AI-агента.

5. Goal Oriented Behavior. Это концепция, которая позволяет играть, ориентируясь на максимально подходящую роль и цель для AI-агента, и выбирать в зависимости от этого, по какому Behavior Tree работать. А он, в свою очередь, определяет условия перехода бота в разные состояния и выполнение действий. В этом варианте для бота используется не четкая логика (Fuzzy logic), основанная на расчете коэффициента важности и полезности той или иной роли. Например, роль для бота с оружием или щитом. Коэффициент на то, чтобы стать «танком», будет выше, чем для роли разведчика.

Далее после выбора роли идет расчет того, какая цель сейчас максимально полезная. Если рядом с нами маг, который готовит заклинание, то лучшей целью будет его защита любой ценой. Дальше на основе текущей цели выбирается набор Behavior Tree, который позволяет боту реализовать поведение для выполнения цели. Благодаря такому подходу можно создать ботов, которые не подчиняются командам, а сами выбирают то или иное действие на основе своих возможностей, текущей боевой ситуации и приоритетов, заложенных в них разработчиками. Такой подход мы применяем в World of Tanks при разработке AI.

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

Так чем же занимается разработчик AI? Основная задача — это реализация цикла Sense → Think → Act. Для этого разработчик AI тесно взаимодействует с другими членами команды, так как реализация и оптимизация алгоритмов поведения AI — это совместная работа программиста, геймдизайнера и QA.

Цикл AI с точки зрения разработчика

Сбор информации (Sense)

В этой части цикла AI-программист занимается тем, что реализует сбор и хранение информации о ситуации на поле боя. Вместе с геймдизайнером он определяет, какая информация собирается, как часто она обновляется и как она распространяется между AI-агентами одной тимы в случае командной игры.

В командных играх часть этих данных общая для всех AI-агентов, и боты могут обмениваться этой информацией друг с другом, что позволяет добиться большей реалистичности для AI-ботов. Зачастую сбор информации не потребляет много ресурсов, кроме случаев частых ray cast, которые и стоит оптимизировать разработчику.

Также часть информации может быть статической. Например, в World of Tanks мы создали несколько слоев данных на карте. Один слой отвечает за прострелы из точки в точку по всей карте. Это позволяет понять, насколько позиция защищена или какие области карты можно контролировать из этого места. Другой слой говорит о том, насколько хорошо местность скрыта от обнаружения, что позволяет понять, а хороши ли те кусты для танка-светляка?

Есть слой с укрытиями разного типа. Это NavMesh, позволяющий ботам перемещаться по карте. Это только часть данных, которые создаются заранее, а кроме них, можно проводить и пре-расчеты. Например, мы можем хранить не только карту укрытий, но то, против каких направлений они защищают. Для больших карт могут создаваться пре-расчеты длинных путей из одной точки интереса на карте в другую. При этом можно заранее просчитать, насколько хорош путь по длине, сложности местности, а во время боя уже накладывать динамическую информацию о потенциальных врагах по пути следования. Тем самым позволяя сэкономить на ресурсах CPU и RAM при выборе пути.

Это важная и интересная часть разработки AI. Кроме явной выгоды от оптимизации и добавления новых возможностей ботам, разработчик получает отличное поле для своего развития, так как такие слои нужно придумывать, а алгоритмы необходимо улучшать и адаптировать для своего проекта.

Принятие решения (Think)

Разработчик самостоятельно обычно не реализует логику поведения бота, этим он занимается вместе с геймдизайнером. Кроме этого, разработчик делает систему, которая отвечает за выполнение Behavior Tree (можно условно назвать AI-движок). Совместно с геймдизайнером проектируют API для работы с Behavior Tree, а после разработчик создает логику для этого API. Например, методы, которые позволяют просчитывать вероятность поражения противника, привлекательность укрытия или оценивать угрозу в секторе. Это самая ресурсоемкая часть работы AI и большая часть оптимизаций производится в этих расчётах.

Один из вариантов решения проблемы производительности и ресурсов — разработка эффективных алгоритмов и эффективное использования статически рассчитанных данных. На их основе AI принимает решение об оптимальности тех или иных действий. При этом система принятия решений должна быть гибкой и устойчивой, ведь не всегда можно гарантировать, что бот обладает всеми доступными подсистемами. Или то, насколько они хорошо адаптированы для той роли, которую отыгрывает AI. А иногда хорошо построенный фундамент AI помогает ей пережить частичное повреждение.

У нас в World of Tanks был забавный случай, когда мы решили попробовать для артиллерии использовать логику обычного танка с поправкой на умение стрелять как артиллерия. Мы играли обычный бой, в котором наш QA решил доказать, что он играет круче ботов (на самом деле так и есть, но не все так просто). Он смог объехать ботов, приехал на базу врага и решил уничтожить всю артиллерию противника, три бота.

Он не обратил внимание на тот факт, что его обнаружила вражеская техника недалеко от базы. В момент, когда он выехал на линию прямой видимости артиллерии, он сразу отправился наблюдать за боем в режиме свободной камеры. Оказалось, что боты, увидев приближение опасного врага, решили стрелять по нему, заранее вычислив место, где он, скорей всего, появится. И как только наш герой появился в зоне прямой видимости, боты дали по нему залп. И все бы ничего, но так поступили все три артиллерии одновременно. Так для себя мы открыли неожиданно слаженную игру ботов на арте, несмотря на то, что изначально это ещё не настраивали!

Действие (Act)

В данной части разработчик реализует механизмы, позволяющие AI-агенту выполнять инструкции после принятия решения. Разрабатываются модули, отвечающие за навигацию (например, адаптация A* к особенностям игры), стрельбу и так далее. Для примера можно взять алгоритм A* и использовать в своём продукте. Но чаще всего у вас будут дополнительные условия, например обрывы. И если не провести оптимизацию, то путь для тяжелого юнита может быть построен слишком близко к обрыву, что приведет к его падению. В таком случае нужно вводить дополнительные коэффициенты на приближение к обрыву или другому неудобному типу местности, а также реализовывать плавное сглаживание маршрута. Иначе боты будут ходить «лесенкой». Эта область сильно граничит с геймплеем, так как использует его механики для выполнения поставленных задач.

Tools

Разработчик AI, кроме реализации цикла (Sense → Think → Act), занимается созданием инструментария для себя, геймдизайнера и QA. Иногда для реализации той или иной механики проще сначала создать инструмент, с помощью которого можно будет настроить и использовать функциональность, а уже потом приступать непосредственно к реализации самой задачи. Для геймдизайнера важно иметь возможность анализировать логику и последовательность принятых AI решений. Для этих целей мы в World of Tanks создали инструменты, которые позволяют записывать все действия ботов в бою, а после делают реплеи, в которых пошагово визуализируют действия ботов, последовательность принятых решений и данные, на основе которых эти решения были приняты.

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

В World of Tanks мы используем AI для настройки того, как AI играет на карте. Для этого мы создали инструмент сбора статистики. Дальше вносим изменения на карте, например, в том, как выглядят стратегические зоны для ботов и где находятся точки переезда между этими зонами. Далее запускаются на сервере 1000–3000 боев, после этого смотрим на рисунок боя с помощью статистики и тепловых карт. На основе этих данных геймдизайнер вносит корректировки в настройку карт и повторяет по кругу. При этом, используя достаточное количество серверных мощностей, можно получить такую статистику за ночь работы ботов и утром же анализировать и вносить правки.

Как это работает на практике

Давайте на реальном примере из World of Tanks рассмотрим полный цикл создание новой функциональности с использованием AI и понаблюдаем, как взаимодействуют между собой программист, геймдизайнер и QA. Начнем с задачи: нам нужны боты, которые будут таранить игрока и взрываться, нанося тем самым урон по нему и небольшому радиусу вокруг. Назовём их ершами. Из дополнительных условий — эти ерши будут ездить быстрей игрока, они не будут стрелять, будут по форме похожи на шар, их можно будет подорвать с одного выстрела, они должны таранить только игроков и ездить группой из Х единиц.

Казалось бы, что может быть проще? Получив эти данные от геймдизайнера, разработчик вспомнил математику и то, как посчитать упреждение по движению игрока, вместе с геймдизайнером создали набор логики Behavior Tree, который направлял бота на противника и заставлял его таранить. Со стороны программиста был реализован специальный набор методов, отвечающий за подрыв и урон по площади. Для проверки создали специальный сценарий, где разместили одного бота ерша и одного обычного бота.

Первый успешно таранил второго, и все было хорошо. Решили отдать это на игровой тест внутри команды, а также собрали статистику. И она показала, что боты на реальной карте не доезжают до игроков. Оказалось, что они из-за высокой скорости подскакивали на кочках и при падении получали урон. После нескольких таких падений взрывались и наносили урон соседним ершам. Это, в свою очередь, создавало цепную реакцию.

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

У бота траектория разворота и возвращения на таран увеличилась, что позволило игрокам перезарядиться и отстреливаться от них. Это создало крутые игровые моменты, когда боты иногда вылетали за карту или иногда промахивались и удавалось на последних секундах их подстрелить. А иногда они удачно загоняли игрока в ловушку и атаковали с разных сторон.

QA хорошо оценили игровые ощущения от встречи с ершами, и эта функциональность ушла на релиз для игроков. Из этого примера видно, что на протяжении всей разработки функциональности программист, геймдизайнер и QA постоянно общались, что позволило эффективней найти все проблемные области фичи и устранить их до того, как это попало к игрокам. Также программист и геймдизайнер вместе разрабатывали алгоритм тарана игрока, QA давали фидбэк о том, насколько интересно играть против таких ботов. Это реальный пример из PVE-режима Мирный-13 нашей командой вместе с создателями серии Silent Hill.

Что нужно для того, чтоб стать AI-разработчиком

Для начала — любить игры! Серьезно, если вы не любите игры, то зачем вообще этим заниматься? Второе — важно много играть в свой продукт, так как только поставив себя на место игрока, вы поймете, как он играет и как должны играть боты. В противном случае вы будете просто «кодировать» задачи геймдизайнера, а так не получится стать именно разработчиком AI.

И последнее — это желание разбираться в том, почему что-то работает так или иначе. AI для сложных игр не использует четкую логику, и не всегда результат цикла Sense → Think → Act будет 100% предсказуем и понятен. Нередко разработчику вместе с геймдизайнером и QA приходится анализировать данные о принятых ботами решениях, чтобы понять, правильно ли поступила AI. Ну и куда ж без hard skills и soft skills.

Hard skills. Первым по списку будет знание скриптовых языков программирования, на которых обычно написана геймплей-логика игры. Например, в World of Tanks это Python, а для Unity — C#. Вторым немаловажным пунктом будет язык C++. Без него будет сложно, так как большая часть оптимизаций делается на нём. Идем дальше.

Хорошее понимание структур данных и алгоритмов. Разработка AI предполагает большое количество расчетов, и выбор оптимальной стратегии хранения и обработки данных может сэкономить значительное количество времени и ресурсов процессора и памяти. Также немаловажным будет знание математики уровня первых двух курсов университета.

Конечно, будет хорошо познакомиться с базовыми подходами при разработке AI (цикл AI и подходы в принятии решений).

Еще важен английский язык. Как и во многих других областях, если вы хотите развиваться в разработке, английский язык — это один из ключевых навыков. Большая часть материалов так и не переводится на наши языки либо переводится с опозданием. А большая часть конференций проводиться только на английском. Кроме того, большинство компаний международные, и в какой-то момент у вас будет необходимость сотрудничать с командами, которые общаются на английском, хоть он нередко будет не основным языком для всех участников диалога.

Soft skills. Существует немалое количество полезных скилов, но в разработке AI я бы хотел выделить один, и это командная работа!

Связка геймдизайнер, программист и QA работает тесно, и часто невозможно выполнить задачу или решить проблему, не соединив их опыт и знания. Поэтому очень важны такие умения, как слушать других людей, дискутировать, а не спорить и задавать вопросы. Иногда лучше спросить у геймдизайнера или QA тот или иной нюанс в игре или механике вместо того, чтобы самому все придумать и сделать, а потом долго и мучительно переделывать. Хорошая работа AI в игре — это всегда заслуга всей команды, а не одного специалиста!

Если вы решили встать на путь AI-разрботчика или только думаете над этим, рекомендую почитать это:

А также советую посмотреть отличный YouTube-канал про AI.

Как видим, создавать AI для игр сложно, но капец как интересно и весело! Кроме всего прочего, это хорошая область для развития как hard skills, так и soft skills. Давайте делать разные и интересные игры, а AI нам с этим поможет.

👍НравитсяПонравилось12
В избранноеВ избранном6
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Стаття все ж таки носить рекламний характер, оскільки всі методичні рекомендації звелися до переліку літератури.

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

Внуков у меня, наверное, не будет, но если вдруг в старости какой-то соседский малолетний засранец захочет спросить: «Эй, старый пердун, что у тебя в жизни было интересного?» и мне ничего в голову не прийдет из работы (а придет другое) — то я вот вообще не расстроюсь. Может автор такой же?

тоесть 40-60 часов в неделю отдавать какой то юслесс штуке которой потом нельзя гордиться ?? ))) хотя наврно это такой трейд он — делаешь то чем можна гордиться получаешь пол зарплаты в виде гордости )))

лучше полную зарплату а для гордости что-то после работы сделать

появилось чувство что автор мог бы помогать созданию межзвездных кораблей или хотябы разрабоки аи для локализации и изоляции корона вируса, но нет — он занят дрочивом на бои с ботами

Угу, а еще мог бы продать машину, хату, и пожертвовать все бабло голодающим детям Африки. Главное, что автору явно нравится то, что он делает, плюс это интересно, еще и деньги приносит.

Автор что ты будешь отвечать на вопросы внуков — дед, а че у тебя в жизни было интерестного ?

Проблема прям вселенского масштаба.

Статья отличная, для новичков то, что надо — без воды, разложены по полочкам базовые принципы, описаны необходимые навыки и показаны реальные примеры взаимодействия команды.

Але погодьтеся, успішна гра має бути як наркотик) Інакше що ще змусить школярів віддавати свої кишенькові гроші за голду?

Але погодьтеся, успішна гра має бути як наркотик) Інакше що ще змусить школярів віддавати свої кишенькові гроші за голду?

Естественно :) не только школьников, а еще студентов и дяденек с тетеньками весьма солидного возраста. Разные жанры для разной целевой аудитории. А вытянуть побольше денежек нам помогают обширные методы внутриигровой аналитики, когда чуть ли не каждое шевеление мышкой или тап по экрану трекается и отправяется в виде параметризованного ивента.

Подписаться на комментарии