meggerry 21 сентября 2021

🎮 С++ или Blueprint: на чем лучше писать игры с использованием Unreal Engine 4?

Создание игр всегда захватывает, но требует от программиста хорошего знания матчасти. Какой язык программирования стоит выбрать для движка Unreal Engine 4? С++ или Blueprint? Попробуем разобраться.
🎮 С++ или Blueprint: на чем лучше писать игры с использованием Unreal Engine 4?
Преимущества использования С++ для разработки игр
Самая главная причина выбора «плюсов» – Unreal Engine 4 (UE4) написан на них. Знание его фундамента позволит максимально эффективно использовать возможности движка. Помимо этого у С++ есть немало возможностей для геймдева. Это компилируемый язык с кучей всевозможных настроек, поддержкой ООП и управлением мельчайшими деталями кода.

Одно из основных преимуществ С++ кроме гибкости – управление памятью. Для новичка это достаточно сложно, но позже самоличное управление сборщиками мусора покажет великолепные результаты и позволит повысить производительность игры.

🎮 С++ или Blueprint: на чем лучше писать игры с использованием Unreal Engine 4?

Преимущества UE4

Именно движок определяет максимальные возможности игры. UE4 – весьма привлекательный выбор:

  • UE4 бесплатен для коммерческого использования с условием: когда доход от игры превысит $1 000 0000, потребуется отдать 5% в качестве роялти.
  • Огромная библиотека моделей, как в магазине EGS, так и на сторонних сайтах. Не все они бесплатны.
  • Возможность создать действительно красивую игру. Например, Assetto Corsa Competizione (ACC) использует оригинальный движок UE4, виды там красивые, особенно ночные гонки.
  • Хорошая работа с фотореалистичной и прочей next-gen графикой. Та же ACC в качестве примера.
  • Поддержка кроссплатформенности (Fortnite в качестве примера).
  • Лёгкость входа в разработку. Сначала интерфейс может показаться сложным, но в нём разобраться несложно.
  • Куча всевозможных обучающих материалов (в том числе бесплатных).
  • Blueprint. «Чертежи» позволяют очень быстро набросать прототип или даже создать полноценную игру. Использовать С++, Blueprints или всё вместе – вопрос, который будет долго занимать мысли программиста до наработки солидного опыта.

Технические особенности движка

  • Если в С++ (ConstructorHelpers) что-то загружается, то оно грузится при старте модуля. Даже если объект не используется, память он будет потреблять.
  • Работа с искусственным интеллектом. Дерево поведения, сбор данных окружающей среды для моделирования поведения – отличные инструменты для полноценной разработки ботов.
  • Материал зависит от текстур, а итоговый меш зависит от материала. Поэтому можно загрузить кирпич из 8 вершин, которые притянут за собой 4К текстуры (если они есть).
  • Из-за этих же зависимостей вызов функции Blueprint повлечёт за собой загрузку всего Blueprint.

Бонусы от совмещения С++ и Blueprint

В сравнении с Blueprint, С++ имеет несколько особых преимуществ. С помощью этого языка программирования можно менять исходный код движка, базовые классы проекта и менять производительность сложных математических расчётов. Всё остальное можно так или иначе реализовать с помощью Blueprint.

  • С++ предлагает возможность прописывания каждого действия игры в любой ситуации, что увеличивает ваши возможности, но иногда приводит к ошибкам. Blueprint же позволит упростить разработку (например, создать кнопку для открытия двери) или поможет в создании полноценной игры далёким от программирования людям.
  • В движок встроен «помогающий» С++, как его называют разработчики. Эта вариация представляет собой упрощённый вариант, направленный на максимально быстрое вхождение в геймдев. Несмотря на возможность писать классический код на С++, разработчики утверждают, что максимальный результат будет достигнут с использованием встроенной вариации. Даже с учётом помощника, потребуются минимальные знания программирования.
  • Благодаря отличному взаимодействию Blueprint и С++ можно использовать оба языка. На С++ программист будет создавать системы и/или строительные блоки из которых позже не умеющий программировать товарищ по команде соберет нужную часть игры. Однако лучше всего создавать проект С++, даже если планируются только Blueprint. Связано это с тем, что проект на Blueprint тяжело переконвертировать в проект на С++. Одна из проблем – перенос переменных.
  • Всегда есть реальные примеры кода на С++ с их реализацией на UE4.
🎮 С++ или Blueprint: на чем лучше писать игры с использованием Unreal Engine 4?

Проблемные места при разработке игр

Если убрать логические ошибки и прочие копания внутри программного кода, то проблемы в геймдеве общие:

  • Первоначально следует описать свою игру, хотя бы в собственной голове. При рабочем плане писать код значительно проще.
  • Каждую новую идею следует фиксировать и анализировать.
  • Правильные приоритеты. Вопреки распространенному заблуждению новичков, сначала проще разработать что-то большое (например, игровой мир), а только потом уделять внимание мелочам (персонажам и самым маленьким игровым объектам).
  • Логичный и понятный баланс. При этом, он должен быть понятным не только разработчикам, но и игрокам.

Есть также несколько специфичных для UE4 проблем:

  • Оптимизацию следует проводить в начале разработки. Как минимум для того, чтобы позже её не пришлось начинать с нуля.
  • Количество объектов, включая травинки, листочки и прочее, следует определять заранее – это позволит сразу выбрать нужный инструмент. Например, для драки на 10 человек Blueprints нужно использовать с осторожностью и не пренебрегать оптимизацией анимации. Начиная со 100 объектов, Blueprint лучше использовать точечно, а если количество единиц перевалило за 1000, от Blueprint стоит отказаться полностью и пользоваться только оптимизированным С++.
  • Анимация часто становится проблемой, замедляющей игру. Чтобы ее избежать, нужно использовать оптимизацию fast-path (у таких объектов появляется иконка молнии).
  • В С++ нет зависимостей. Если нужно вызвать метод класса, он вызывается без проблем. Однако в конструкторе не стоит загружать ассеты, потому что для каждого AActor создаётся и default-версия, для которой тоже вызывается конструктор. Лучше всего логику писать на С++, а всякие настройки, материалы и эффекты – в Blueprint. Это сохранит много ресурсов.
  • Отдельная проблема в разнице тика Blueprint и таймере С++. Есть timer manager (содержащий массив таймеров), который триггерит таймеры подходящее время. При этом если таймер не меньше 0,016, то он будет дешевле по ресурсам, поскольку тикающий актор обрабатывается особым образом. К тому же пока не тикнут все тикающие акторы, общий тик не произойдёт.
  • Таймер отрабатывает не каждый свой тик, за этим следит менеджер таймеров.
  • Из-за пула FTickableGameObject, во время тика программа проходит по всем функциям, проверяет их состояние и формирует стек вызова. Если ещё и в акторе добавить tick, то он автоматически добавит оверхед, даже если ничего не происходит. Это усложняет код.

Заключение

На UE4 есть 2 варианта создания приложения: Blueprint и С++. Если взять чистую реализацию без смешивания языков, то С++, ценой удорожания разработки, предлагает гибкость, прирост производительности, создание сложных ИИ (например, для RTS) и онлайн-возможности игры. Использование Blueprint в чистом виде едва ли возможно для создания сложных ресурсоемких игр, зато он хорош для новичков. Оптимальный вариант, как всегда, лежит где-то посередине – наилучшего результата можно достигнуть, если команда использует и Blueprint и С++. Каждый инструмент хорош для своих задач.

***

Хочу научиться программировать с нуля, но не знаю, с чего начать. Что делать?

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

  • Основы программирования на Python.
  • Профессия Python-разработчик.
  • Алгоритмы и структуры данных.
  • Математика для Data Science.
  • Профессия Data Science.
  • Frontend Basic: принцип работы современного веба.
  • Профессия Фронтенд-разработчик.
  • Обработка естественного языка. Полный курс.

На подходе еще больше 10 курсов для взрослых и детей.

Дополнительные материалы:

МЕРОПРИЯТИЯ

Комментарии

ВАКАНСИИ

Добавить вакансию
Разработчик С#
от 200000 RUB до 400000 RUB
Java Team Lead
Москва, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ