Вопрос выбора движка годами решался одной фразой: Unity для мобильных игр и инди, Unreal для больших консольных проектов. За формулой стоит пропасть настоящих различий: разные языки, разные пайплайны ассетов, разные экономики лицензий и разные требования к людям. Разберём, чем ежедневная работа в двух движках отличается на деле, где цена графики Unreal оправдана сполна, почему мобильные студии продолжают выбирать Unity даже после истории с Runtime Fee и от чего решение зависит сильнее, чем от вкусов технического директора.

Две философии разработки C# в Unity против C++ и Blueprints в Unreal

Весь геймплей в Unity пишется на C#: компоненты MonoBehaviour вешаются на объекты, движок подхватывает их методы, а для сборок IL2CPP транслирует байткод в нативный код, включая требование опережающей компиляции под iOS. Редактор работает на рантайме Mono с быстрой динамической сборкой, финальные билды собирает IL2CPP, и разница между средой разработки и релизом иногда дарит сюрпризы. Исходник движка закрыт: код ядра не почитаешь и не поправишь, доступ к нему продаётся избранным по Enterprise тарифу.

public class Spinner : MonoBehaviour {
    [SerializeField] private float speed = 90f;

    private void Update() {
        transform.Rotate(0f, speed * Time.deltaTime, 0f);
    }
}

Unreal построен на C++ с макросами рефлексии, через которые редактор видит классы, свойства и функции, а рядом существует визуальный слой Blueprints. Полный исходник лежит в открытом доступе, и студия может разобрать рендерер или сетевой код до последней строки:

UCLASS()
class ASpinner : public AActor {
    GENERATED_BODY()

public:
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Rotation")
    float Speed = 90.f;

    virtual void Tick(float DeltaTime) override {
        AddActorLocalRotation(FRotator(0.f, Speed * DeltaTime, 0.f));
    }
};

Философии диктуют найм. В Unity успешно работает обычный разработчик ПО со знанием C#. В Unreal нужен инженер, готовый жить в макросах, разделять логику с дизайнерами и читать чужой исходник движка вместо документации. Официальные обучающие материалы у обоих хороши, но в Unreal часть ответов живёт только в исходнике, и это отдельный навык.

История отсюда смотрит прямо в выбор. Unity вышла в 2005 году и выросла из желания маленьких команд собирать игры без собственного движкового отдела, Unreal ведёт родословную от шутера 1998 года и десятилетиями обслуживал большие студии с выделенными программистами движка. Наследие видно в каждом углу: Unity прячет сложность за одним языком, Unreal выставляет её напоказ в обмен на контроль.

Скорость итераций для маленькой команды против пайплайна большого коллектива

Соло разработчик меряет движок скоростью цикла: поправил, сохранил, нажал плей. В Unity правка скрипта втягивается в редактор за секунды, домен перезагружается, и маленькая команда делает дюжину итераций за вечер. Настройка входа в режим игры без перезагрузки домена ускоряет цикл ещё в разы. В Unreal компиляция C++ на крупном проекте занимает минуты, инструмент Live Coding смягчает рутину, Blueprints меняются мгновенно, но большая студия всё равно живёт конвейером: кеш производных ассетов пересчитывается часами на сборочной ферме, шейдеры компилируются тысячами, и один неверный коммит останавливает полсотни человек.

Пайплайн непрерывной интеграции собирается у обоих движков, но вес разный. Unity вызывает пакетную сборку одной строкой:

Unity -batchmode -quit -nographics -executeMethod BuildScript.BuildAll

В Unreal билд крутится через собственный инструмент автоматизации RunUAT, и крупные студии держат фермы агентов под кеш шейдеров. Профилировка тоже несимметрична: в Unity хватает встроенного Profiler и Frame Debugger, в Unreal работает Insights с трассировкой и графиками кадра по каждой подсистеме движка.

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

Мобильные платформы и 2D проекты где до сих пор выбирают Unity

Мобильная ниша за Unity исторически: сборка на Android умещается в десятки мегабайт, 2D инструментарий с Tilemap и Sprite Atlas отточен годами, пакеты аналитики и монетизации ставятся из магазина ассетов за вечер. IL2CPP закрывает требования магазинов приложений, а список крупных мобильных игр на Unity убедителен: Genshin Impact, Among Us, Beat Saber.

Unreal на телефонах подтянулся, пятая линейка принесла профиль для мобильных устройств, но вес пустого проекта всё равно измеряется сотнями мегабайт, а флагманские механики Nanite и Lumen на мобильном железе работают в урезанном виде или не работают вовсе. Для тактической карточной игры или визуальной новеллы разница в размере инсталляции превращается в разницу в конверсии установки в платящего игрока.

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

Для 2D выбор ещё очевиднее. Пайплайн спрайтов, покадровой анимации и физики 2D в Unity зрелые, тогда как Paper2D в Unreal остаётся нишевым инструментом без флагманских релизов. Hollow Knight и Cuphead сделаны на Unity, и это не случайность, а отражение нишевой силы движка.

Lumen и Nanite из Unreal Engine и их настоящая цена для проекта

Пятая версия Unreal вышла в апреле 2022 года с двумя технологиями, изменившими бюджет графики. Nanite это виртуализированная геометрия: движок сам готовит уровни детализации, и сцена держит модели кинематографического качества напрямую. Lumen считает динамическое глобальное освещение и отражения, программно и на аппаратных трассировщиках. Black Myth Wukong и Tekken 8 показывают, что даёт связка на массовом железе.

Цена честная. Lumen и Nanite требуют мощных видеокарт, компиляция шейдеров ворует часы из сборочных машин, а во время игры возникает микропровисание от предкомпиляции конвейеров состояний, и студии тратят релизные недели на прекеширование. Для гоночного симулятора, шутера или action приключения это окупается. Для карточной игры, футбольного менеджера или прототипа головоломки трата превращается в балласт: технологии просто некуда приложить.

Флагманский стек шире двух громких имён. Niagara собирает визуальные эффекты сложных сцен, Chaos считает разрушение окружения, MetaSounds даёт процедурный звук. Комплект превращает редактор Unreal в мини конвейер большой студии, и именно за это платят билет: временем сборки, требованиями к железу рабочих мест и поиском специалистов. Unity с конвейером HDRP закрывает верхний сегмент персональных компьютеров, но большинство высокобюджетных консольных релизов последних лет собраны на Unreal, и рынок специалистов по нему плотнее. Средний игровой ПК тянет Lumen на высоких настройках, интегрированные видеокарты офисных ноутбуков остаются за бортом, и студии закладывают два режима графики, а не один.

Blueprints для дизайнеров и правила переписывания узлов на C++

Визуальные скрипты Blueprints дают дизайнерам власть над геймплеем без программиста: события, ветвления и таймлайны собираются мышкой, и прототип механики рождается за вечер. Производственная цена узнаваема: плотная логика в нодах работает медленнее C++, граф из сотен узлов немилосерден в код ревью, а слияние изменений двух дизайнеров в одном графе сравнимо с ручным перемирием.

Зрелые студии держат правила. Прототип собирается в Blueprints, подтверждает гипотезу, затем горячий участок переписывается на C++ с сохранением тех же событий и свойств, чтобы дизайнер продолжал настройку в редакторе. Границу между слоями прописывают в стайлгайдах: за логикой такта и управления не выходят узлы, за балансом и подстройкой не трогают код. В Unity та же роль у встроенного Visual Scripting, выросшего из приобретённого в 2021 году инструмента, но массовой практики разделения слоёв там не сложилось: геймплей почти всегда пишут руками на C#.

Механика потерь от узлов измерима. Каждый узел исполняется виртуальной машиной Blueprints с накладными расходами на вызов, и граф из двух тысяч узлов в тик захлёбывается там, где эквивалентный C++ справляется без усилий. Поэтому порог переезда в код часто фиксируют числом: например, два миллисекунды логики на кадр, всё выше переезжает в C++ без обсуждений.

Лицензии и деньги после отмены Runtime Fee и роялти Unreal

12 сентября 2023 года Unity объявила Runtime Fee, плату за каждую установку игры, и получила самый громкий бунт индустрии за десятилетие: форки, отказы студий, пересчёты доверия. Спустя ровно год, 12 сентября 2024 года, новое руководство отменило плату полностью и вернулось к классическим подпискам. Unity 6 вышла в октябре 2024 года, лицензия Personal бесплатна до 200 тысяч долларов годовой выручки, Pro стоит порядка 2200 долларов за рабочее место в год.

Unreal Engine распространяется бесплатно с роялти 5 процентов с выручки свыше 1 миллиона долларов на продукт, и роялти полностью снимается для игр, издаваемых только в магазине Epic. Отдельная строка сметы не зависит от движка: доступ к консольным платформам покупается у платформодержателей отдельно. Для неигровых отраслей действует отдельный режим: крупные компании с выручкой выше миллиона платят за рабочие места по фиксированной ставке, около 1850 долларов в год. Урок Runtime Fee индустрия усвоила навсегда: экономика движка проверяется на прочность так же тщательно, как технический стек.

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

Выбор движка под жанр размер команды и горизонт поддержки

Практический фильтр складывается из четырёх вопросов:
1. жанр и платформа: мобильный проект или 2D почти всегда честнее считать на Unity, консольное 3D с высокой графикой на Unreal;
2. размер и состав команды: соло и тройка сотрудников итерируют на Unity, коллектив с рендер инженерами и техническими художниками получает больше от Unreal;
3. технический потолок: нужны ли исходник рендерера, встроенная репликация сетевого кода и штатные технологии освещения;
4. деньги: сколько стоит подписка против роялти при прогнозе выручки и насколько болезненна зависимость от политики вендора.

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

Топология команды добавляет последний штрих. На Unity маленькое ядро легко дополняется внешними художниками и аниматорами: ассеты ложатся пакетом, сцену соберёт один человек. В Unreal разделение труда глубже по умолчанию: программист владеет слоем C++, дизайнер нодами, теххудожник материалами, и найти на рынке сразу троих сложнее, чем одного универсала на C#. Дальше в силу вступает горизонт: движок выбирается на пять лет, и цена смены после релиза с наработанной кодовой базой неподъёмна для большинства студий.

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