Unreal Engine
Всем
Unreal Engine — кроссплатформенный движок для 3D-проектов — игры, симуляторы, архитектурная визуализация, виртуальное производство. Теоретическую основу (что такое движок, сравнение с Unity и Godot) см. в главах Игровой движок и Виды игровых движков — Unreal Engine; здесь — практика в редакторе. Справочник API и lifecycle: Справочник по Unreal Engine.
На Unreal Fest Chicago (июнь 2026) Epic представила Unreal Engine 6 — единый редактор UE5 и UEFN, язык Verse, Scene Graph, ИИ-ассистенты через MCP. Ранний доступ запланирован на конец 2027. Разбор терминов и сроков — в главе Unreal Engine 6. Учебные проекты сейчас собирают на стабильной UE 5.x из Epic Games Launcher.
Что такое Unreal Engine
Unreal Engine — программная платформа для интерактивного контента в реальном времени. Движок предоставляет готовые подсистемы — рендеринг, физику, анимацию, звук, сеть, ввод и управление ресурсами. Разработчик собирает сцену из акторов и компонентов, а логику описывает в Blueprints (визуальные скрипты) или C++.
История
| Версия | Год | Заметные изменения |
|---|---|---|
| UE1 | 1998 | Коммерческий движок вместе с игрой Unreal; рендеринг, физика, UnrealScript |
| UE2 | 2002 | Улучшенный рендерер, сетевой код; UT2004, Splinter Cell |
| UE3 | 2006 | Kismet (визуальный скриптинг), PBR-материалы; Gears of War, BioShock |
| UE4 | 2014 | Бесплатная лицензия, исходники на GitHub, Blueprints; Fortnite, Rocket League, PUBG |
| UE5 | 2022 | Nanite, Lumen, World Partition; The Matrix Awakens, кино (The Mandalorian) |
| UE6 | 2027 (EA) / ~2029 (релиз) | Единый редактор UE5+UEFN, Verse, Scene Graph, MCP; тизер Paris Major (май 2026), детали Unreal Fest (июнь 2026). UE6 |
:::note Sea of Thieves работает на собственном движке Rare, а не на Unreal Engine. :::
Возможности и лицензия
- Blueprints — логика без C++ — события, переменные, вызовы функций движка.
- C++ — системы, оптимизация, плагины; полный исходный код на GitHub (после регистрации в Epic Developer Portal).
- Nanite — высокодетализированная статическая геометрия без ручных LOD.
- Lumen — динамическое глобальное освещение без предварительного запекания lightmaps.
- Quixel Bridge — сканированные материалы и модели в редакторе.
Лицензия: движок бесплатен; 5% роялти от валового дохода продукта после порога $1 000 000 в год (уточняйте актуальные условия в EULA Epic). Для некоммерческого и части неигрового использования роялти может не применяться.
Установка и настройка окружения
- Epic Games Launcher — скачайте с unrealengine.com и войдите в аккаунт Epic.
- Unreal Engine → Library → + — установите актуальную версию (рекомендуется последняя стабильная UE 5.x).
- IDE для C++ (если планируете нативный код):
- Visual Studio 2022 с рабочей нагрузкой "Разработка игр на C++" (Game development with C++), или
- Rider for Unreal Engine (JetBrains).
- Создание проекта: Projects → New Project → шаблон Third Person или Blank → выберите Blueprint (без C++) или C++ → Create.
При первом C++-проекте Launcher предложит установить недостающие компоненты Visual Studio. Сборка из исходников движка — через GitHub и Unreal Build Tool (UBT); для учебных задач достаточно бинарной версии из Launcher.
Интерфейс редактора
| Панель | Назначение |
|---|---|
| Viewport | Просмотр и редактирование сцены (WASD + мышь). Game View — вид "как у игрока". |
| Content Browser | Все ассеты проекта: меши, материалы, Blueprints, уровни. |
| World Outliner | Список акторов на уровне; поиск и группировка. |
| Details | Свойства выбранного актора или ассета. |
| Modes | Place Actors, Landscape, Foliage, Modeling и др. |
Базовый цикл: создать уровень → разместить геометрию → назначить материалы → добавить логику (Blueprint или C++) → Play в редакторе → File → Package Project для сборки.
Архитектура — от UObject до сцены
Иерархия типов
UObject — базовый объект движка (данные, reflection, GC)
└── AActor — сущность в мире (позиция, поворот, масштаб)
└── APawn, ACharacter, ALight, ATriggerBox …
└── UActorComponent — логика без transform
└── USceneComponent — компонент с transform
└── UStaticMeshComponent, UCapsuleComponent, UCameraComponent …
- UObject — сериализация, сборка мусора, редактор, репликация. Сам по себе не имеет координат в мире.
- AActor — "объект сцены": корневой Root Component задаёт transform; остальные компоненты крепятся к нему.
- Компоненты — переиспользуемые части — меш, коллизия, звук, скрипт.
Пример (аналог Unity): персонаж — ACharacter с UCapsuleComponent (коллизия), USkeletalMeshComponent (модель), UCharacterMovementComponent (движение) и Blueprint/C++-классом логики.
Игровые роли (Framework)
| Класс | Роль |
|---|---|
| AGameModeBase | Правила матча: класс персонажа по умолчанию, спавн, пауза. Только на сервере в сетевой игре. |
| AGameStateBase | Состояние матча для всех (счёт, таймер). |
| APlayerController | Ввод игрока, камера, UI. |
| APawn / ACharacter | Управляемое тело в мире. |
| APlayerState | Данные игрока (имя, очки), реплицируются клиентам. |
World содержит один или несколько Level (карт). В UE5 крупные открытые миры часто используют World Partition — автоматическое разбиение уровня на ячейки со стримингом.
Reflection — UCLASS, UPROPERTY, UFUNCTION
Движок генерирует метаданные из C++-заголовков с помощью Unreal Header Tool (UHT). Макросы связывают код с редактором, Blueprints и сетью:
UCLASS()— класс виден движку и Blueprints.UPROPERTY(EditAnywhere)— поле редактируется в Details.UFUNCTION(BlueprintCallable)— функцию можно вызвать из Blueprint.UFUNCTION(Server, Reliable)— RPC на сервер (сеть).
Blueprints не компилируются в C++: они переводятся в байткод Blueprint VM и вызывают C++-функции через reflection. Нативный C++ компилируется UBT отдельно.
Lifecycle актора
Unreal вызывает методы актора в предсказуемом порядке (аналог MonoBehaviour в Unity):
| Метод UE | Аналог Unity | Когда |
|---|---|---|
PreInitializeComponents |
— | До инициализации компонентов |
BeginPlay |
Start |
Старт игры для актора |
Tick |
Update |
Каждый кадр (если PrimaryActorTick.bCanEverTick = true) |
EndPlay |
OnDestroy |
Удаление или смена уровня |
NotifyActorBeginOverlap |
OnTriggerEnter |
Overlap-коллизия (часто через делегаты компонента) |
Подробная таблица — в справочнике.
В новых проектах UE5 рекомендуется Enhanced Input (`UEnhancedInputComponent`, Input Actions/Mapping Context), а не legacy `BindAction`. Шаблоны Third Person уже используют Enhanced Input.
Примеры кода
Минимальный C++ Actor
Создайте класс через Tools → New C++ Class → Actor, пересоберите проект (Compile в редакторе или Ctrl+Alt+F11).
Параметр в редакторе и Blueprint
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Gameplay")
float MoveSpeed = 600.f;
EditAnywhere — поле в Details; BlueprintReadWrite — чтение/запись из Blueprint.
Overlap-триггер (коллизия)
В конструкторе или BeginPlay подпишитесь на делегат компонента:
// Предполагается UBoxComponent* TriggerBox как UPROPERTY
TriggerBox->OnComponentBeginOverlap.AddDynamic(this, &AMyPickup::OnOverlapBegin);
UFUNCTION()
void OnOverlapBegin(UPrimitiveComponent* OverlappedComp, AActor* OtherActor,
UPrimitiveComponent* OtherComp, int32 OtherBodyIndex,
bool bFromSweep, const FHitResult& SweepResult);
В Details у коллизии: Collision Presets → Overlap для нужного Object Type. Ответы — Block (физика), Overlap (событие без блокировки), Ignore.
Простая репликация
// В заголовке
UPROPERTY(Replicated, VisibleAnywhere, BlueprintReadOnly, Category = "Health")
int32 Health = 100;
// В .cpp
void AMyCharacter::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME(AMyCharacter, Health);
}
На сервере меняйте Health — значение синхронизируется клиентам. RPC (UFUNCTION(Server, Reliable)) — для действий "клиент просит сервер выполнить логику".
Blueprint (без C++)
- Content Browser → Blueprint Class → родитель Actor.
- Event Graph: Event BeginPlay → Print String ("Hello").
- Перетащите Blueprint на уровень → Play.
Для движения персонажа удобнее наследовать Character или использовать шаблон Third Person.
Blueprints
Blueprints — визуальный язык — узлы событий, переменных, функций и потока управления. Логика выполняется виртуальной машиной; тяжёлые операции выносят в C++.
Когда Blueprint: прототипы, UI, триггеры уровня, настройка параметров художниками.
Когда C++: hot path (каждый кадр на сотнях объектов), новые компоненты, плагины, изменения движка.
Подсистемы движка
| Подсистема | Суть |
|---|---|
| Рендеринг | Deferred shading по умолчанию; Nanite, Lumen, TSR, Material Graph → HLSL |
| Физика (Chaos) | Rigid body, разрушаемость, cloth; симуляция может идти в отдельном потоке |
| Анимация | Skeleton, Animation Sequence, Blend Spaces, Control Rig, IK |
| Аудио (MetaSounds) | Процедурный граф звука; spatial audio, HRTF |
| Сеть | Модель client-server; репликация свойств, RPC, relevancy |
| Ресурсы | Ассеты .uasset, стриминг, World Partition для больших миров |
Рендеринг UE5 — возможности и компромиссы
Nanite хранит геометрию кластерами и выбирает детализацию по экрану. Подходит для крупной статической архитектуры; не заменяет LOD для скелетных мешей и мелочи (патроны, UI-модели).
Lumen строит упрощённое представление сцены (Surface Cache, SDF) для динамического GI. В закрытых сценах с неизменным светом baked lighting часто даёт лучшее качество и стабильнее по FPS. При быстром движении возможны ghosting и задержка реакции освещения.
TSR (Temporal Super Resolution) рендерит ниже целевого разрешения и восстанавливает картинку по истории кадров. Экономит GPU, но тонкая геометрия (решётки, провода) может мерцать; настройка зависит от платформы и жанра.
Материалы: каждая уникальная комбинация параметров может порождать новый шейдер. На DirectX 12 первое использование требует PSO (Pipeline State Object) — без Shader Pipeline Cache / PSO Precaching возможны фризы при входе в новую зону. Подробнее об оптимизации — Оптимизация игр.
Коллизии
Коллизия задаётся примитивами (box, sphere, capsule, convex) на компонентах. Два уровня: broad phase (быстрый отбор пар) и narrow phase (точный контакт). Используется и для физики, и для триггеров, line trace (LineTraceSingleByChannel) и проверки видимости.
Структура проекта
MyProject/
├── MyProject.uproject # описание проекта и модулей
├── Config/ # настройки (Input, Game, Engine…)
├── Content/ # ассеты (не в Git LFS без настройки)
│ ├── Characters/
│ ├── Maps/
│ └── Blueprints/
└── Source/ # C++ (если проект с кодом)
└── MyProject/
Зависимости между ассетами отслеживает движок: материал → текстуры, уровень → меши и Blueprints.
Сборка: компиляция C++ → кукинг ассетов → кэши шейдеров / Nanite → Package Project.
Типичные ошибки начинающих
Nanite на всём подряд — включайте только для крупной статической геометрии с высоким polycount.
Нет LOD у персонажей — для Skeletal Mesh Nanite не работает; настройте LOD или платформенные mesh.
Lumen везде — в интерьерах с фиксированным светом сравните с lightmaps / static lighting.
TSR "из коробки" — проверьте чёткость UI и мелких объектов; при необходимости повысьте internal resolution или отключите TSR на целевой платформе.
Только stat unit — смотрите также stat gpu, stat scenerendering, Shader Complexity (режим в Viewport).
Сравнение с другими движками
| Unreal Engine 5 | Unity (URP/HDRP) | Godot | |
|---|---|---|---|
| Языки | C++, Blueprints | C# | GDScript, C# |
| Сильные стороны | AAA-графика, открытый код, кино/VP | 2D, мобильные, большое комьюнити | Лёгкий, MIT, 2D |
| Порог входа | Выше (C++, тяжёлый редактор) | Ниже для прототипов | Низкий |
UE5 часто выбирают для: фотореалистичных игр, linear/action-adventure, архвиз, virtual production, портфолио технического арта.
UE5 требует больше усилий для: casual/mobile с минимальным бюджетом на оптимизацию, 2D-only проектов, команд без опыта профилирования GPU. При этом Fortnite, PUBG и ряд мобильных AAA показывают, что высокий FPS и мобильные платформы достижимы, но не "из коробки" без настройки.