В 21 веке делать игры на разные устройства могут не только опытные разработчики, но и новички в области программирования. А иногда – даже те, кто ранее был далек от IT вовсе. Google называет создание игрового контента одним из наиболее популярных направлений в области информационных технологий.
Если человек может сделать игру, он способен не просто развлекаться таким способом, а еще и зарабатывать. Причем неплохие деньги. Некоторые IT-компании готовы платить разработчикам игрового контента от 500 000 рублей и больше.
Сегодня предстоит выяснить, как делаются компьютерные игры. Ниже представлен план действий для реализации поставленной задачи, а также инструменты, которые могут пригодиться разработчику. Эта информация рассчитана на широкую публику. Она позволит разобраться в основах GameDev и понять, что лучше всего использовать для того или иного проекта.
GameDev (или геймдев) – это создание игр. Процесс, в ходе которого можно сделать собственный развлекательный контент. Разработкой может заниматься как один человек, так и целый коллектив программистов.
Коммерческие игры, согласно Google, создаются преимущественно командами разработчиков, нанятыми теми или иными фирмами. Компании могут специализироваться на создании игрового контента для ПК, приставок или мобильных устройств. Процесс разработки, как уверяет Google, может финансироваться другой, более крупной организацией – издателем.
Разработка масштабных игр может обходиться в десятки миллионов долларов. А небольшие проекты, особенно создаваемые новичками, нередко вообще не требуют никаких затрат – кроме времени программиста.
Способы разработки
Google отмечает, что программировать игры можно различными способами. Этот момент необходимо продумать перед непосредственным созданием того или иного проекта. От метода программирования зависит спектр дальнейших действий.
Согласно Google, писать игры можно несколькими способами:
- С нуля. Этот вариант больше всего подходит новичкам для небольших проектов, а также опытным разработчикам для масштабных идей. Исходные коды таких «игрушек» будут писаться полностью вручную. С него можно начать для того, чтобы разобраться с языками программирования досконально.
- При помощи шаблонов. Шаблон – это готовый блок, который используется для тех или иных проектов. Игры – не исключение. Чтобы сделать первый игровой проект, обычно можно достать готовые шаблоны и настроить их под себя. Для этого достаточно настроить компоненты на собственные. Данный вариант хорош для новичков и тех, кто хочет просто посмотреть, как пишутся игры. Уникальный и большой проект с помощью шаблонов создать не получится.
- Через движки. Это еще один распространенный вариант программирования, согласно Google. С его помощью даже новичок сможет достаточно быстро получить на выходе игру для одной из популярных платформ. Движки обычно имеют все необходимое для геймдева. Это оптимальное решение для разработчика.
Все перечисленные методы, если верить Google, в той или иной степени подразумевают использование навыков программирования. Поэтому без их непосредственного изучения не обойтись. Исключение могут составлять шаблоны, но с их помощью уникальный и успешный игровой проект сформировать почти невозможно.
План создания видеоигр
Google отмечает, что при создании компьютерных и консольных видеоигр делаются примерно одни и те же действия. Начать необходимо с формирования четкого плана действий. С его помощью разработчики смогут не сбиться с пути и грамотно начать реализацию задумки.
Если описать разработку компьютерных игр в общих чертах, можно представить себе ее план примерно так:
- Придумать идею, а также жанр и сеттинг. В зависимости от этих моментов будет меняться дальнейший алгоритм действий. Можно выбрать современные тренды и написать что-то популярного жанра, а можно сделать своеобразный клон существующих развлекательных проектов, чтобы набраться опыта. Google отмечает, что также можно сделать что-нибудь уникальное.
- Определиться с платформой, на которой будет работать контент. Сейчас игры пишутся под компьютеры, приставки или мобильные устройства. Некоторые развлекательные проекты создаются в качестве кроссплатформенных продуктов. Они будут запускаться на любых устройствах, но обычно имеют меньшую функциональность. Выбор оптимальной платформы также зависит от того, какой жанр будет у игрового контента, а также от функциональных возможностей задумки.
- Выбрать язык программирования для написания исходного кода. Именно на этом этапе важно понимать, для какой платформы создается программа.
- Определиться с движком. Google отмечает, что такой вариант подходит и новичкам в геймдеве, и более опытным их «коллегам». Каждый движок имеет свои ключевые особенности. Иногда можно создавать видеоигры без навыков разработки, а когда-то они нужны, но в минимальном «наборе».
- Создать дизайн-документ. Там необходимо описать всю игру: механики, сюжетные детали, параметры баланса, графику и так далее. Google отмечает, что можно продумать дизайн-документ перед выбором движка.
- Сформировать команду. Данный этап, согласно Google, не является обязательным. Над некоторыми проектами программист способен трудиться полностью самостоятельно. А вот для крупных идей лучше собрать команду и распределить различные задачи. Этот прием позволит добиться наибольшей продуктивности.
- Написать программный код. Это наиболее значимый и сложный этап. Во время него осуществляется реализация ранее продуманных идей.
- Создать графику. Google подчеркивает, что она может создаваться совместно с программным кодом.
- Собрать проект – «совместить» исходный код и графику.
- Провести тестирование. Google отмечает, что без этого этапа видеоигра может оказаться провальной. Это касается даже небольших проектов. Во время тестирования разработчики и тестировщики проверяют исправность своего программного продукта, а также его соответствие техническому заданию.
- Выложить релиз. Видео игра может быть представлена в качестве свободной разработки и размещаться в Интернете «просто так». Но большинство ресурсов, особенно коммерческих, выкладываются на специализированных платформах. В качестве примера стоит привести Play Market или Steam. Бесплатные разработки там тоже встречаются.
Примерный план того, что нужно для создания собственной видео игры, изучен. Google отмечает, что при использовании игрового движка можно облегчить этап программирования, создания физики и механики, эффектов и графики. В таких приложениях есть все необходимое для реализации поставленной задачи.
Далее некоторые наиболее значимые этапы будут рассмотрены более подробно. Эта информация поможет более эффективно подойти к геймдеву даже тем, кто ранее не имел никакого опыта в соответствующей сфере.
Выбор движка
Сегодня существует огромное множество разнообразных конструкторов и движков для создания игр. Google отмечает, что некоторые компании создают уникальные движки для своих проектов. Это распространенная практика, но она не используется одинокими программистами и небольшими организациями по разработке программного обеспечения.
Согласно Google, наибольшим спросом при создании видеоигр пользуются движки: Game Maker: Studio, а также Unity 3D и Unreal Engine. Все эти приложения для программирования игрового контента позволяют писать кроссплатформенные проекты: для компьютеров, мобильных устройств и консолей.
Unity3D
Google подчеркивает, что на Unity делаются разнообразные игры. Этот движок является наиболее популярным в области геймдева. Он позволяет формировать проекты совершенно любого жанра и для любых платформ.
Unity выступает своеобразным стандартом разработки мобильных проектов. К его преимуществам относят:
- Бесплатное распространение. Платить придется только тогда, когда годовой доход от игрового проекта превышает 200 000 долларов США.
- Поддержку разных языков программирования, включая C#. Он не слишком сложный в плане изучения.
- Наличие системы визуального скриптинга под названием Bolts. С помощью нее в видеоигру изменения сможет вносить дизайнер. Привлекать к операции программиста, как уверяет Google, не придется.
- Поддержку экспорта игры для браузеров.
Недостатки у Unity3D тоже есть. К ним относят проблемы при создании фотореалистичной картинки на экране. А еще не исключены трудности при переходе на новую версию движка.
Unreal Engine
Unreal Engine – основной конкурент Unity. Google подчеркивает, что у соответствующего программного обеспечения потрясающая «картинка» и новейшие технологии.
К преимуществам Unreal Engine относят:
- Бесплатное распространение движка. Платить за его использование не нужно до тех пор, пока разработчик не получит 1 000 000 долларов с проекта. Далее придется отдавать процент от прибыли создателям движка.
- Google отмечает среди преимуществ технологии фотореалистичного рендера.
- Возможность проверки на большой пользовательской базе новых технологий движка.
- Наличие визуального программирования. Google отмечает, что для этого есть инструмент Blueprints. С его помощью получится расставлять мышью блоки и связывать их между собой, формируя игровую логику. Писать исходный код с нуля нет никакой необходимости.
Unreal Engine требует изучения C++ для программирования, если не использовать Blueprints. Также это программное обеспечение, согласно Google, не подходит для разработки мобильных игр и 2D-видеоигр. Это связано с размером исходных файлов и наличием небольшого функционала для двухмерных игр по сравнению с Unity. Экспортировать видеоигры для браузера с помощью Unreal Engine не получится.
Game Maker: Studio
Данный движок ориентирован на создание двухмерных видеоигр. Он обычно используется инди-разработчиками. Позволяет очень быстро прототипировать и создавать 2D-игры. У Game Maker есть режим визуальной разработки для новичков. Вместе с ним получится миновать написание исходного кода. Также движок позволяет экспортировать игру для браузера.
Game Maker, согласно информации из Google, не подходит для создания полноценных 3D-продуктов, хотя в нем поддерживаются функции для них. Программное обеспечение лишено многопоточности. А еще у него нет детализированной бесплатной версии – только базовый вариант с экспортом для веба на сервис gx.games. Остальные разработки движка с теми или иными ограничениями доступны по подписке.
Язык для геймдева
Универсального языка, с помощью которого возможно создание собственной игры, нет. Google указывает на то, что можно пользоваться любым инструментом соответствующего типа – от Python до C++, от Pascal до Java. Все зависит от конкретного проекта.
В зависимости от выбранного языка разработки будет меняться время выпуска видеоигры, а также платформа, для которой она выйдет. Производительность тоже зависит от языка.
C++ подходит для кроссплатформенной разработки, JavaScript и PHP – для браузерных игр. Если планируется использование движков, лучше изучить C#. С его помощью прописываются скрипты. Главное – отказаться от недооцененности языков. Тот же Minecraft был написан на Java.
Основные игровые компоненты
Когда движок и язык разработки выбран, а сюжет видеоигры продуман, самое время двигаться дальше. Нужно проработать все компоненты будущего проекта.
Если человек пишет видеоигру «с нуля», ему придется создавать все игровые элементы самостоятельно. В случае с движками – пользоваться предлагаемыми готовыми решениями. Далее предстоит выяснить, из чего состоит любая игра.
Физика
Google отмечает, что физика – это то, как игровой мир реагирует на пользовательские действия или на действия объектов внутри мира. К физическим действиям относят:
- бег;
- прыжки;
- ходьбу;
- удары;
- выстрелы;
- езду;
- падение предметов и так далее.
Чтобы реализовать обычный прыжок, как говорит Google, нужно проверить, что персонаж стоит на земле. Далее – менять координату Y для поднятия игрока вверх и закончить подъем в тот или иной момент. После – начать падение до тех пор, пока игрок не окажется на земле. Все это сопровождается соответствующей анимацией.
В движках физика уже прописана. Ее остается только настроить под собственную разработку. Это значительно упрощает создание видеоигры.
Механика
Механика – это то, как игрок будет взаимодействовать с игровым миром. Совокупность игровых механик формирует игровой процесс. Если в игре есть ходьба и прыжки, она может выступать платформером.
Google отмечает, что при добавлении механики получения опыта, прокачки навыков и повышения уровней, у разработчика получится RPG. Механика – это важный игровой компонент, наравне с графикой и сюжетом.
Графика
Раньше графика, если верить Google, создавалась только при помощи программного кода. Чуть позже появились спрайты и текстуры, а также 3D-модели. Все это нужно подготовить или с нуля, или через движки. А затем – добавить в игру.
В случае с движками достаточно загрузить те или иные документы, а затем прикрепить их к нужным моделям. В противном случае – прописывать все вручную, включая анимацию. Это долго и не всегда удобно.
Баланс
Google называет игровой баланс важной составляющей. Это значит, что каждый противник должен иметь сильные и слабые стороны. Так геймплей не будет выглядеть как борьба с полевыми цветами или многочасовая перестрелка с боссом.
В шутерах есть разные виды оружия. Каждое из них обладает своей мощностью и временем перезарядки. Для баланса более мощное оружие должно перезаряжаться дольше, если урон маленький – быстрее.
Искусственный интеллект
Иногда в видеоиграх предусматривается взаимодействие игроков с NPC. В этом случае нужно приписать неигровым персонажам те или иные модели поведения. Лучше всего для этого использовать искусственный интеллект.
Такую работу Google называет одной из самых сложных. Это связано с тем, что придется учитывать огромное количество ситуаций, для которых задумана та или иная реакция.
Все это – только основы геймдева. Научиться писать игры с нуля или через движки помогут дистанционные компьютерные курсы.
Интересует GameDev-направление? Обратите внимание на авторские курсы в Otus!
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>Основы GameDev или как создаются игры OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="В 21 веке делать игры на разные устройства могут не только опытные разработчики, но и новички в области программирования. А иногда – даже те, кто ранее был далек от IT вовсе. Google называет создание игрового контента одним из наиболее популярных направлений в области информационных технологий. Если человек может сделать игру, он способен не просто развлекаться" />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/osnovy-gamedev-ili-kak-sozdajutsya-igry/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/osnovy-gamedev-ili-kak-sozdajutsya-igry\/#article","name":"\u041e\u0441\u043d\u043e\u0432\u044b GameDev \u0438\u043b\u0438 \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0438\u0433\u0440\u044b OTUS","headline":"\u041e\u0441\u043d\u043e\u0432\u044b GameDev \u0438\u043b\u0438 \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0438\u0433\u0440\u044b","author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2024\/11\/oj-1080x720-21.jpg","width":2245,"height":1587},"datePublished":"2024-11-14T17:28:15+00:00","dateModified":"2024-11-14T17:28:18+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/osnovy-gamedev-ili-kak-sozdajutsya-igry\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/osnovy-gamedev-ili-kak-sozdajutsya-igry\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, gamedev, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/osnovy-gamedev-ili-kak-sozdajutsya-igry\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/osnovy-gamedev-ili-kak-sozdajutsya-igry\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/osnovy-gamedev-ili-kak-sozdajutsya-igry\/#listItem","position":2,"name":"\u041e\u0441\u043d\u043e\u0432\u044b GameDev \u0438\u043b\u0438 \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0438\u0433\u0440\u044b","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author","url":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/","name":"A. Pavlenko","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/osnovy-gamedev-ili-kak-sozdajutsya-igry\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d4c499a104d7c2522fa41f89e6819499?s=96&d=mm&r=g","width":96,"height":96,"caption":"A. Pavlenko"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/osnovy-gamedev-ili-kak-sozdajutsya-igry\/#webpage","url":"https:\/\/otus.ru\/journal\/osnovy-gamedev-ili-kak-sozdajutsya-igry\/","name":"\u041e\u0441\u043d\u043e\u0432\u044b GameDev \u0438\u043b\u0438 \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0438\u0433\u0440\u044b OTUS","description":"\u0412 21 \u0432\u0435\u043a\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0433\u0440\u044b \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043c\u043e\u0433\u0443\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u044b\u0442\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u043d\u043e \u0438 \u043d\u043e\u0432\u0438\u0447\u043a\u0438 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0410 \u0438\u043d\u043e\u0433\u0434\u0430 \u2013 \u0434\u0430\u0436\u0435 \u0442\u0435, \u043a\u0442\u043e \u0440\u0430\u043d\u0435\u0435 \u0431\u044b\u043b \u0434\u0430\u043b\u0435\u043a \u043e\u0442 IT \u0432\u043e\u0432\u0441\u0435. Google \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439. \u0415\u0441\u043b\u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0433\u0440\u0443, \u043e\u043d \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c\u0441\u044f","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/osnovy-gamedev-ili-kak-sozdajutsya-igry\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2024\/11\/oj-1080x720-21.jpg","@id":"https:\/\/otus.ru\/journal\/osnovy-gamedev-ili-kak-sozdajutsya-igry\/#mainImage","width":2245,"height":1587},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/osnovy-gamedev-ili-kak-sozdajutsya-igry\/#mainImage"},"datePublished":"2024-11-14T17:28:15+00:00","dateModified":"2024-11-14T17:28:18+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/11228" /><link rel='shortlink' href='https://otus.ru/journal/?p=11228' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fosnovy-gamedev-ili-kak-sozdajutsya-igry%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fosnovy-gamedev-ili-kak-sozdajutsya-igry%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-11228 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-11228" class="the-post post-11228 post type-post status-publish format-standard has-post-thumbnail category-polza tag-gamedev tag-programmirovanie">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
Основы GameDev или как создаются игры
</h1>
<a href="https://otus.ru/journal/osnovy-gamedev-ili-kak-sozdajutsya-igry/" class="date-link" data-wpel-link="internal"><time class="post-date">14 ноября, 2024</time></a>
</div>
<div class="featured">
<a href="https://otus.ru/journal/wp-content/uploads/2024/11/oj-1080x720-21.jpg" class="image-link" data-wpel-link="internal"><img width="770" height="515" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20770%20515%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-contentberg-main size-contentberg-main lazyload wp-post-image" alt="Основы GameDev или как создаются игры" title="Основы GameDev или как создаются игры" decoding="async" fetchpriority="high" data-srcset="https://otus.ru/journal/wp-content/uploads/2024/11/oj-1080x720-21-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2024/11/oj-1080x720-21-270x180.jpg 270w" data-src="https://otus.ru/journal/wp-content/uploads/2024/11/oj-1080x720-21-770x515.jpg" data-sizes="(max-width: 770px) 100vw, 770px" /> </a>
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#GameDev_%E2%80%93_%D0%BE%D0%B1%D0%B7%D0%BE%D1%80_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%B0" title="GameDev – обзор процесса">GameDev – обзор процесса</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="#%D0%A1%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D1%8B_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8" title="Способы разработки">Способы разработки</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-3" href="#%D0%9F%D0%BB%D0%B0%D0%BD_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE%D0%B8%D0%B3%D1%80" title="План создания видеоигр">План создания видеоигр</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-4" href="#%D0%92%D1%8B%D0%B1%D0%BE%D1%80_%D0%B4%D0%B2%D0%B8%D0%B6%D0%BA%D0%B0" title="Выбор движка">Выбор движка</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#Unity3D" title="Unity3D">Unity3D</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-6" href="#Unreal_Engine" title="Unreal Engine">Unreal Engine</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-7" href="#Game_Maker_Studio" title="Game Maker: Studio">Game Maker: Studio</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-8" href="#%D0%AF%D0%B7%D1%8B%D0%BA_%D0%B4%D0%BB%D1%8F_%D0%B3%D0%B5%D0%B9%D0%BC%D0%B4%D0%B5%D0%B2%D0%B0" title="Язык для геймдева">Язык для геймдева</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-9" href="#%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%B8%D0%B3%D1%80%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%8B" title="Основные игровые компоненты">Основные игровые компоненты</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-10" href="#%D0%A4%D0%B8%D0%B7%D0%B8%D0%BA%D0%B0" title="Физика">Физика</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-11" href="#%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%BA%D0%B0" title="Механика">Механика</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="#%D0%93%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0" title="Графика">Графика</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-13" href="#%D0%91%D0%B0%D0%BB%D0%B0%D0%BD%D1%81" title="Баланс">Баланс</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-14" href="#%D0%98%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D1%82%D0%B5%D0%BB%D0%BB%D0%B5%D0%BA%D1%82" title="Искусственный интеллект">Искусственный интеллект</a></li></ul></li></ul></nav></div>
<h1 class="wp-block-heading"></h1>
<p>В 21 веке делать игры на разные устройства могут не только опытные разработчики, но и новички в области программирования. А иногда – даже те, кто ранее был далек от IT вовсе. Google называет создание игрового контента одним из наиболее популярных направлений в области информационных технологий.</p>
<p>Если человек может сделать игру, он способен не просто развлекаться таким способом, а еще и зарабатывать. Причем неплохие деньги. Некоторые IT-компании готовы платить разработчикам игрового контента от 500 000 рублей и больше.</p>
<p>Сегодня предстоит выяснить, как делаются компьютерные игры. Ниже представлен план действий для реализации поставленной задачи, а также инструменты, которые могут пригодиться разработчику. Эта информация рассчитана на широкую публику. Она позволит разобраться в основах GameDev и понять, что лучше всего использовать для того или иного проекта.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="GameDev_%E2%80%93_%D0%BE%D0%B1%D0%B7%D0%BE%D1%80_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%B0"></span>GameDev – обзор процесса<span class="ez-toc-section-end"></span></h2>
<p>GameDev (или геймдев) – это создание игр. Процесс, в ходе которого можно сделать собственный развлекательный контент. Разработкой может заниматься как один человек, так и целый коллектив программистов.</p>
<p>Коммерческие игры, согласно Google, создаются преимущественно командами разработчиков, нанятыми теми или иными фирмами. Компании могут специализироваться на создании игрового контента для ПК, приставок или мобильных устройств. Процесс разработки, как уверяет Google, может финансироваться другой, более крупной организацией – издателем.</p>
<p>Разработка масштабных игр может обходиться в десятки миллионов долларов. А небольшие проекты, особенно создаваемые новичками, нередко вообще не требуют никаких затрат – кроме времени программиста.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D1%8B_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8"></span>Способы разработки<span class="ez-toc-section-end"></span></h2>
<p>Google отмечает, что программировать игры можно различными способами. Этот момент необходимо продумать перед непосредственным созданием того или иного проекта. От метода программирования зависит спектр дальнейших действий.</p>
<p>Согласно Google, писать игры можно несколькими способами:</p>
<ol>
<li>С нуля. Этот вариант больше всего подходит новичкам для небольших проектов, а также опытным разработчикам для масштабных идей. Исходные коды таких «игрушек» будут писаться полностью вручную. С него можно начать для того, чтобы разобраться с языками программирования досконально.</li>
<li>При помощи шаблонов. Шаблон – это готовый блок, который используется для тех или иных проектов. Игры – не исключение. Чтобы сделать первый игровой проект, обычно можно достать готовые шаблоны и настроить их под себя. Для этого достаточно настроить компоненты на собственные. Данный вариант хорош для новичков и тех, кто хочет просто посмотреть, как пишутся игры. Уникальный и большой проект с помощью шаблонов создать не получится.</li>
<li>Через движки. Это еще один распространенный вариант программирования, согласно Google. С его помощью даже новичок сможет достаточно быстро получить на выходе игру для одной из популярных платформ. Движки обычно имеют все необходимое для геймдева. Это оптимальное решение для разработчика.</li>
</ol>
<p>Все перечисленные методы, если верить Google, в той или иной степени подразумевают использование навыков программирования. Поэтому без их непосредственного изучения не обойтись. Исключение могут составлять шаблоны, но с их помощью уникальный и успешный игровой проект сформировать почти невозможно.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D0%BB%D0%B0%D0%BD_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE%D0%B8%D0%B3%D1%80"></span>План создания видеоигр<span class="ez-toc-section-end"></span></h2>
<p>Google отмечает, что при создании компьютерных и консольных видеоигр делаются примерно одни и те же действия. Начать необходимо с формирования четкого плана действий. С его помощью разработчики смогут не сбиться с пути и грамотно начать реализацию задумки.</p>
<p>Если описать разработку компьютерных игр в общих чертах, можно представить себе ее план примерно так:</p>
<ol>
<li>Придумать идею, а также жанр и сеттинг. В зависимости от этих моментов будет меняться дальнейший алгоритм действий. Можно выбрать современные тренды и написать что-то популярного жанра, а можно сделать своеобразный клон существующих развлекательных проектов, чтобы набраться опыта. Google отмечает, что также можно сделать что-нибудь уникальное. </li>
<li>Определиться с платформой, на которой будет работать контент. Сейчас игры пишутся под компьютеры, приставки или мобильные устройства. Некоторые развлекательные проекты создаются в качестве кроссплатформенных продуктов. Они будут запускаться на любых устройствах, но обычно имеют меньшую функциональность. Выбор оптимальной платформы также зависит от того, какой жанр будет у игрового контента, а также от функциональных возможностей задумки.</li>
<li>Выбрать <a href="https://otus.ru/journal/yazyki-programmirovaniya-harakteristika-opisanie-vidy/" data-wpel-link="internal">язык программирования</a> для написания исходного кода. Именно на этом этапе важно понимать, для какой платформы создается программа.</li>
<li>Определиться с движком. Google отмечает, что такой вариант подходит и новичкам в геймдеве, и более опытным их «коллегам». Каждый движок имеет свои ключевые особенности. Иногда можно создавать видеоигры без навыков разработки, а когда-то они нужны, но в минимальном «наборе».</li>
<li>Создать дизайн-документ. Там необходимо описать всю игру: механики, сюжетные детали, параметры баланса, графику и так далее. Google отмечает, что можно продумать дизайн-документ перед выбором движка.</li>
<li>Сформировать команду. Данный этап, согласно Google, не является обязательным. Над некоторыми проектами программист способен трудиться полностью самостоятельно. А вот для крупных идей лучше собрать команду и распределить различные задачи. Этот прием позволит добиться наибольшей продуктивности.</li>
<li>Написать программный код. Это наиболее значимый и сложный этап. Во время него осуществляется реализация ранее продуманных идей.</li>
<li>Создать графику. Google подчеркивает, что она может создаваться совместно с программным кодом.</li>
<li>Собрать проект – «совместить» исходный код и графику.</li>
<li>Провести тестирование. Google отмечает, что без этого этапа видеоигра может оказаться провальной. Это касается даже небольших проектов. Во время тестирования разработчики и тестировщики проверяют исправность своего программного продукта, а также его соответствие техническому заданию.</li>
<li>Выложить релиз. Видео игра может быть представлена в качестве свободной разработки и размещаться в Интернете «просто так». Но большинство ресурсов, особенно коммерческих, выкладываются на специализированных платформах. В качестве примера стоит привести Play Market или Steam. Бесплатные разработки там тоже встречаются.</li>
</ol>
<p>Примерный план того, что нужно для создания собственной видео игры, изучен. Google отмечает, что при использовании игрового движка можно облегчить этап программирования, создания физики и механики, эффектов и графики. В таких приложениях есть все необходимое для реализации поставленной задачи.</p>
<p>Далее некоторые наиболее значимые этапы будут рассмотрены более подробно. Эта информация поможет более эффективно подойти к геймдеву даже тем, кто ранее не имел никакого опыта в соответствующей сфере.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%92%D1%8B%D0%B1%D0%BE%D1%80_%D0%B4%D0%B2%D0%B8%D0%B6%D0%BA%D0%B0"></span>Выбор движка<span class="ez-toc-section-end"></span></h2>
<p>Сегодня существует огромное множество разнообразных конструкторов и движков для создания игр. Google отмечает, что некоторые компании создают уникальные движки для своих проектов. Это распространенная практика, но она не используется одинокими программистами и небольшими организациями по разработке программного обеспечения.</p>
<p>Согласно Google, наибольшим спросом при создании видеоигр пользуются движки: Game Maker: Studio, а также Unity 3D и Unreal Engine. Все эти приложения для программирования игрового контента позволяют писать кроссплатформенные проекты: для компьютеров, мобильных устройств и консолей.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Unity3D"></span>Unity3D<span class="ez-toc-section-end"></span></h3>
<p>Google подчеркивает, что на Unity делаются разнообразные игры. Этот движок является наиболее популярным в области геймдева. Он позволяет формировать проекты совершенно любого жанра и для любых платформ.</p>
<p>Unity выступает своеобразным стандартом разработки мобильных проектов. К его преимуществам относят:</p>
<ol>
<li>Бесплатное распространение. Платить придется только тогда, когда годовой доход от игрового проекта превышает 200 000 долларов США.</li>
<li>Поддержку разных языков программирования, включая C#. Он не слишком сложный в плане изучения.</li>
<li>Наличие системы визуального скриптинга под названием Bolts. С помощью нее в видеоигру изменения сможет вносить дизайнер. Привлекать к операции программиста, как уверяет Google, не придется.</li>
<li>Поддержку экспорта игры для браузеров.</li>
</ol>
<p>Недостатки у Unity3D тоже есть. К ним относят проблемы при создании фотореалистичной картинки на экране. А еще не исключены трудности при переходе на новую версию движка.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Unreal_Engine"></span>Unreal Engine<span class="ez-toc-section-end"></span></h3>
<p>Unreal Engine – основной конкурент Unity. Google подчеркивает, что у соответствующего программного обеспечения потрясающая «картинка» и новейшие технологии.</p>
<p>К преимуществам Unreal Engine относят:</p>
<ol>
<li>Бесплатное распространение движка. Платить за его использование не нужно до тех пор, пока разработчик не получит 1 000 000 долларов с проекта. Далее придется отдавать процент от прибыли создателям движка.</li>
<li>Google отмечает среди преимуществ технологии фотореалистичного рендера.</li>
<li>Возможность проверки на большой пользовательской базе новых технологий движка.</li>
<li>Наличие визуального программирования. Google отмечает, что для этого есть инструмент Blueprints. С его помощью получится расставлять мышью блоки и связывать их между собой, формируя игровую логику. Писать исходный код с нуля нет никакой необходимости.</li>
</ol>
<p>Unreal Engine требует изучения C++ для программирования, если не использовать Blueprints. Также это программное обеспечение, согласно Google, не подходит для разработки мобильных игр и 2D-видеоигр. Это связано с размером исходных файлов и наличием небольшого функционала для двухмерных игр по сравнению <a href="https://otus.ru/journal/unity-dlya-novichkov-i-c/" data-wpel-link="internal">с Unity</a>. Экспортировать видеоигры для браузера с помощью Unreal Engine не получится.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Game_Maker_Studio"></span>Game Maker: Studio<span class="ez-toc-section-end"></span></h3>
<p>Данный движок ориентирован на создание двухмерных видеоигр. Он обычно используется инди-разработчиками. Позволяет очень быстро прототипировать и создавать 2D-игры. У Game Maker есть режим визуальной разработки для новичков. Вместе с ним получится миновать написание исходного кода. Также движок позволяет экспортировать игру для браузера.</p>
<p>Game Maker, согласно информации из Google, не подходит для создания полноценных 3D-продуктов, хотя в нем поддерживаются функции для них. Программное обеспечение лишено многопоточности. А еще у него нет детализированной бесплатной версии – только базовый вариант с экспортом для веба на сервис gx.games. Остальные разработки движка с теми или иными ограничениями доступны по подписке.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%AF%D0%B7%D1%8B%D0%BA_%D0%B4%D0%BB%D1%8F_%D0%B3%D0%B5%D0%B9%D0%BC%D0%B4%D0%B5%D0%B2%D0%B0"></span>Язык для геймдева<span class="ez-toc-section-end"></span></h2>
<p>Универсального языка, с помощью которого возможно создание собственной игры, нет. Google указывает на то, что можно пользоваться любым инструментом соответствующего типа – от Python до C++, от Pascal до Java. Все зависит от конкретного проекта.</p>
<p>В зависимости от выбранного языка разработки будет меняться время выпуска видеоигры, а также платформа, для которой она выйдет. Производительность тоже зависит от языка.</p>
<p>C++ подходит для кроссплатформенной разработки, JavaScript и PHP – для браузерных игр. Если планируется использование движков, лучше изучить C#. С его помощью прописываются <a href="https://otus.ru/journal/osnovy-raboty-so-skriptami/" data-wpel-link="internal">скрипты</a>. Главное – отказаться от недооцененности языков. Тот же Minecraft был написан на Java.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%B8%D0%B3%D1%80%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%8B"></span>Основные игровые компоненты<span class="ez-toc-section-end"></span></h2>
<p>Когда движок и язык разработки выбран, а сюжет видеоигры продуман, самое время двигаться дальше. Нужно проработать все компоненты будущего проекта.</p>
<p>Если человек пишет видеоигру «с нуля», ему придется создавать все игровые элементы самостоятельно. В случае с движками – пользоваться предлагаемыми готовыми решениями. Далее предстоит выяснить, из чего состоит любая игра.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A4%D0%B8%D0%B7%D0%B8%D0%BA%D0%B0"></span>Физика<span class="ez-toc-section-end"></span></h3>
<p>Google отмечает, что физика – это то, как игровой мир реагирует на пользовательские действия или на действия объектов внутри мира. К физическим действиям относят:</p>
<ul>
<li>бег;</li>
<li>прыжки;</li>
<li>ходьбу;</li>
<li>удары;</li>
<li>выстрелы;</li>
<li>езду;</li>
<li>падение предметов и так далее.</li>
</ul>
<p>Чтобы реализовать обычный прыжок, как говорит Google, нужно проверить, что персонаж стоит на земле. Далее – менять координату Y для поднятия игрока вверх и закончить подъем в тот или иной момент. После – начать падение до тех пор, пока игрок не окажется на земле. Все это сопровождается соответствующей анимацией.</p>
<p>В движках физика уже прописана. Ее остается только настроить под собственную разработку. Это значительно упрощает создание видеоигры.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%BA%D0%B0"></span>Механика<span class="ez-toc-section-end"></span></h3>
<p>Механика – это то, как игрок будет взаимодействовать с игровым миром. Совокупность игровых механик формирует игровой процесс. Если в игре есть ходьба и прыжки, она может выступать платформером.</p>
<p>Google отмечает, что при добавлении механики получения опыта, прокачки навыков и повышения уровней, у разработчика получится RPG. Механика – это важный игровой компонент, наравне с графикой и сюжетом.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%93%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0"></span>Графика<span class="ez-toc-section-end"></span></h3>
<p>Раньше графика, если верить Google, создавалась только при помощи программного кода. Чуть позже появились спрайты и текстуры, а также 3D-модели. Все это нужно подготовить или с нуля, или через движки. А затем – добавить в игру.</p>
<p>В случае с движками достаточно загрузить те или иные документы, а затем прикрепить их к нужным моделям. В противном случае – прописывать все вручную, включая анимацию. Это долго и не всегда удобно.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%91%D0%B0%D0%BB%D0%B0%D0%BD%D1%81"></span>Баланс<span class="ez-toc-section-end"></span></h3>
<p>Google называет игровой баланс важной составляющей. Это значит, что каждый противник должен иметь сильные и слабые стороны. Так геймплей не будет выглядеть как борьба с полевыми цветами или многочасовая перестрелка с боссом.</p>
<p>В шутерах есть разные виды оружия. Каждое из них обладает своей мощностью и временем перезарядки. Для баланса более мощное оружие должно перезаряжаться дольше, если урон маленький – быстрее.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%98%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D1%82%D0%B5%D0%BB%D0%BB%D0%B5%D0%BA%D1%82"></span>Искусственный интеллект<span class="ez-toc-section-end"></span></h3>
<p>Иногда в видеоиграх предусматривается взаимодействие игроков с NPC. В этом случае нужно приписать неигровым персонажам те или иные модели поведения. Лучше всего для этого использовать искусственный интеллект.</p>
<p>Такую работу Google называет одной из самых сложных. Это связано с тем, что придется учитывать огромное количество ситуаций, для которых задумана та или иная реакция.</p>
<p>Все это – только основы геймдева. Научиться писать игры с нуля или через движки помогут дистанционные компьютерные курсы.</p>
<p><em>Интересует <a href="https://otus.ru/catalog/courses?categories=gamedev" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a>-направление?</em> <em>Обратите внимание на авторские курсы в Otus!</em></p>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-tags"><a href="https://otus.ru/journal/tag/gamedev/" rel="tag" data-wpel-link="internal">gamedev</a><a href="https://otus.ru/journal/tag/programmirovanie/" rel="tag" data-wpel-link="internal">программирование</a></div>
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Fosnovy-gamedev-ili-kak-sozdajutsya-igry%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fosnovy-gamedev-ili-kak-sozdajutsya-igry%2F&text=%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B%20GameDev%20%D0%B8%D0%BB%D0%B8%20%D0%BA%D0%B0%D0%BA%20%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%8E%D1%82%D1%81%D1%8F%20%D0%B8%D0%B3%D1%80%D1%8B" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Fosnovy-gamedev-ili-kak-sozdajutsya-igry%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fosnovy-gamedev-ili-kak-sozdajutsya-igry%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2024%2F11%2Foj-1080x720-21.jpg&description=%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B%20GameDev%20%D0%B8%D0%BB%D0%B8%20%D0%BA%D0%B0%D0%BA%20%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%8E%D1%82%D1%81%D1%8F%20%D0%B8%D0%B3%D1%80%D1%8B" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/logarifmy-i-ih-osnovnye-svojstva-chto-nuzhno-znat-specialistu/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/logarifmy-i-ih-osnovnye-svojstva-chto-nuzhno-znat-specialistu/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="106" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20106%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Логарифмы и их основные свойства: что нужно знать специалисту" decoding="async" data-srcset="https://otus.ru/journal/wp-content/uploads/2024/11/oj-1080x720-20-150x106.jpg 150w, https://otus.ru/journal/wp-content/uploads/2024/11/oj-1080x720-20-300x212.jpg 300w, https://otus.ru/journal/wp-content/uploads/2024/11/oj-1080x720-20-1024x724.jpg 1024w, https://otus.ru/journal/wp-content/uploads/2024/11/oj-1080x720-20-768x543.jpg 768w, https://otus.ru/journal/wp-content/uploads/2024/11/oj-1080x720-20-1536x1086.jpg 1536w" data-src="https://otus.ru/journal/wp-content/uploads/2024/11/oj-1080x720-20-150x106.jpg" data-sizes="(max-width: 150px) 100vw, 150px" title="Логарифмы и их основные свойства: что нужно знать специалисту" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/logarifmy-i-ih-osnovnye-svojstva-chto-nuzhno-znat-specialistu/" data-wpel-link="internal">Логарифмы и их основные свойства: что нужно знать специалисту</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/logarifmy-i-ih-osnovnye-svojstva-chto-nuzhno-znat-specialistu/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2024-11-14T17:09:38+00:00">14 ноября, 2024</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">7 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/iso-obraz-opisanie-i-sozdanie/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/iso-obraz-opisanie-i-sozdanie/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="106" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20106%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="ISO-образ: описание и создание" decoding="async" data-srcset="https://otus.ru/journal/wp-content/uploads/2024/11/oj-1080x720-22-150x106.jpg 150w, https://otus.ru/journal/wp-content/uploads/2024/11/oj-1080x720-22-300x212.jpg 300w, https://otus.ru/journal/wp-content/uploads/2024/11/oj-1080x720-22-1024x724.jpg 1024w, https://otus.ru/journal/wp-content/uploads/2024/11/oj-1080x720-22-768x543.jpg 768w, https://otus.ru/journal/wp-content/uploads/2024/11/oj-1080x720-22-1536x1086.jpg 1536w" data-src="https://otus.ru/journal/wp-content/uploads/2024/11/oj-1080x720-22-150x106.jpg" data-sizes="(max-width: 150px) 100vw, 150px" title="ISO-образ: описание и создание" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/iso-obraz-opisanie-i-sozdanie/" data-wpel-link="internal">ISO-образ: описание и создание</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/iso-obraz-opisanie-i-sozdanie/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2024-11-14T17:43:52+00:00">14 ноября, 2024</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">6 Mins Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" title="Новые уроки ноября: только топ-темы по программированию" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Новые уроки ноября: только топ-темы по программированию" title="Новые уроки ноября: только топ-темы по программированию" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" class="post-link" data-wpel-link="internal">Новые уроки ноября: только топ-темы по программированию</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-09T23:24:11+00:00">9 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/schjot-idjot-na-chasy/" title="Счёт идёт на часы" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Счёт идёт на часы" title="Счёт идёт на часы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-370x245.png 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/schjot-idjot-na-chasy/" class="post-link" data-wpel-link="internal">Счёт идёт на часы</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-10-30T15:04:59+00:00">30 октября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/osnovy-gamedev-ili-kak-sozdajutsya-igry\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Tue, 10 Mar 2026 20:14:46 GMT -->