Вопрос выбора движка годами решался одной фразой: 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#. Дальше в силу вступает горизонт: движок выбирается на пять лет, и цена смены после релиза с наработанной кодовой базой неподъёмна для большинства студий.
Оба движка зрелые, живые и никуда не денутся в ближайшие годы. Различие проходит не по красоте скриншотов, а по экономике цикла: сколько стоит итерация, кто в штате её делает и что произойдёт с проектом на третьем году жизни. Команды, которые отвечают на эти вопросы числами из собственного прототипа, почти не ошибаются. Команды, которые выбирают движок по демонстрациям с выставок, узнают цену выбора в самый неудобный момент релиза.