Unreal Engine

Всем

Unreal Engine — кроссплатформенный движок для 3D-проектов — игры, симуляторы, архитектурная визуализация, виртуальное производство. Теоретическую основу (что такое движок, сравнение с Unity и Godot) см. в главах Игровой движок и Виды игровых движков — Unreal Engine; здесь — практика в редакторе. Справочник API и lifecycle: Справочник по Unreal Engine.

Unreal Engine 6

На 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). Для некоммерческого и части неигрового использования роялти может не применяться.


Установка и настройка окружения

  1. Epic Games Launcher — скачайте с unrealengine.com и войдите в аккаунт Epic.
  2. Unreal Engine → Library → + — установите актуальную версию (рекомендуется последняя стабильная UE 5.x).
  3. IDE для C++ (если планируете нативный код):
    • Visual Studio 2022 с рабочей нагрузкой "Разработка игр на C++" (Game development with C++), или
    • Rider for Unreal Engine (JetBrains).
  4. Создание проекта: 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++)

  1. Content Browser → Blueprint Class → родитель Actor.
  2. Event Graph: Event BeginPlayPrint String ("Hello").
  3. Перетащите 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 и мобильные платформы достижимы, но не "из коробки" без настройки.