Одно из основных преимуществ С++ кроме гибкости – управление памятью. Для новичка это достаточно сложно, но позже самоличное управление сборщиками мусора покажет великолепные результаты и позволит повысить производительность игры.
Преимущества 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.
Проблемные места при разработке игр
Если убрать логические ошибки и прочие копания внутри программного кода, то проблемы в геймдеве общие:
- Первоначально следует описать свою игру, хотя бы в собственной голове. При рабочем плане писать код значительно проще.
- Каждую новую идею следует фиксировать и анализировать.
- Правильные приоритеты. Вопреки распространенному заблуждению новичков, сначала проще разработать что-то большое (например, игровой мир), а только потом уделять внимание мелочам (персонажам и самым маленьким игровым объектам).
- Логичный и понятный баланс. При этом, он должен быть понятным не только разработчикам, но и игрокам.
Есть также несколько специфичных для 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 курсов для взрослых и детей.
Дополнительные материалы:
Комментарии