Unreal Engine 5

Unreal Engine 5 (UE5) — игровой движок от Epic Games, на котором созданы Fortnite, Gears of War и множество кино-продуктов. Технологии Nanite и Lumen позволяют делать фотореалистичные миры с минимальной ручной настройкой.

Уровень: начальный 19 разделов ⏱ 4–6 часов

1. Что такое Unreal Engine 5

Движок объединяет редактор уровней, систему материалов, физику, анимации, визуальное программирование Blueprints и поддержку С++ в одном инструменте. Лицензия: бесплатная, с отчислением 5% после заработка свыше 1 млн долларов.

ТехнологияНазначение
Naniteбесшовные детализированные 3D-модели (геометрия в реальном времени)
Lumenглобальное освещение и отражения без ручного запекания
Chaosфизика разрушений и столкновений
Niagaraсистемы частиц: огонь, дым, взрывы
Control Rigпрямая работа с костями скелета
UE5 требует мощного ПК: как минимум 8 ГБ ОЗУ (лучше 16+), видеокарту с поддержкой DirectX 12 и SSD. Для первых проектов подойдёт и встроенная графика при низких настройках.

2. Установка и первый запуск

Скачай Epic Games Launcher (официальный сайт), зарегистрируй аккаунт и перейди на вкладку Unreal Engine:

  1. Нажми Install под версией 5.x.
  2. Дождись загрузки (десятки гигабайт) и запусти движок.
  3. В окне выбора проекта возьми шаблон First Person или Third Person.
# Быстрый способ проверить видео-драйверы (Windows)
dxdiag
Шаблоны — готовые стартовые проекты с игроком, камерой и примером уровнями. Начиная с них, ты сразу увидишь результат.

3. Интерфейс редактора

Главные панели редактора:

Интерфейс настраивается перетаскиванием панелей. Потерял панель? Меню Window вернёт любую из них.

4. Навигация в 3D-пространстве

Управление камерой в Viewport:

# Удержание ПКМ + WASD — движение вперёд/назад/в стороны
# ЛКМ — вращение камеры
# ПКМ — стремительное движение
# Колесо — зум
# ПКМ + W/S — летать вверх/вниз
# Shift — ускориться
# F — сфокусироваться на выбранном объекте
# 1..4 — переключение перспективы/ортографии

Ищи объекты в Outliner по имени, а не «на глаз» — на больших уровнях так быстрее.

5. Актёры и компоненты

Actor — любой объект на уровне. Component — часть актёра: геометрия, свет, звук, коллизия.

Добавь актёра в уровень:

  1. В Content Browser найди меш (например, SM_ChamferCube из Starter Content).
  2. Перетащи его в Viewport.
  3. В Details измени Transform: Location, Rotation, Scale.
  4. Зажми Alt и перетащи объект — создастся его копия.
# Горячие клавиши редактора
W / E / R   # инструменты: переместить / повернуть / масштабировать
Ctrl+C / Ctrl+V   # копировать вставиться актёра
End   # «прилепить» к земле
Каждый актёр можно превратить в Blueprint Class — тогда его поведение программируется кнопками и логикой, а не только свойствами.

6. Материалы и освещение

Материал задаёт, как поверхность реагирует на свет. Создание:

  1. В Content Browser: ПКМ → Materials → Material.
  2. Двойной клик — откроется редактор нод.
  3. Выведи в Base Color узел Vector Parameter — получишь настраиваемый цвет.
  4. Сохрани и перетащи материал на объект в уровень.

Освещение уровня: Directional Light — солнце, Sky Light — небо и рассеянный свет. С включённым Lumen глобальное освещение считается автоматически, в реальном времени.

Свет задают сцене настроение. Для ночной сцены уменьши интенсивность Directional Light и добавь Point Light (точечный) у фонарей и ламп.

7. Blueprints — визуальное программирование

Blueprints позволяют писать логику без кода — нодами.

Создай первый Blueprint Class:

  1. Content Browser → ПКМ → Blueprint Class → выбери родителя (например, Actor).
  2. Открой его двойным кликом.
  3. Добавь переменную целого типа и ноды BeginPlay и Print String.
  4. Соедини BeginPlay → Print String, выведи значение переменной.
# Логика Blueprint = события + ноды-функции
BeginPlay      # вызывается при появлении актёра в мире
Event Tick     # вызывается каждый кадр
Print String   # показывает текст на экране (отладка)
Не выноси тяжёлые вычисления в Event Tick — это выполняется каждый кадр (60 раз в секунду). Для периодической логики используй таймеры или события.

8. Взаимодействие и ввод

Реагируй на нажатие клавиши через Project Settings → Enhanced Input. Упрощённо для обучения — событие актёра:

  1. В Blueprint задействуй Actor Has Tag и сравнение имени.
  2. Для триггеров используй OnComponent Begin Overlap — срабатывает при пересечении коллизий.
  3. Проверку выполни в Event Actor BeginOverlap.

Простой пример — открытие двери по нажатию клавиши E в зоне триггера:

Перетащи на уровень: Box Collision (триггер) + Static Mesh (дверь)
В Blueprint:
  Event Actor BeginOverlap  -> Show "Нажми E"
  Event Actor EndOverlap    -> Hide подсказку
  IA_Toggle (E) -> Rotate дверь на 90 градусов
Имена событий в движке примерно такие: ActorBeginOverlap, InputAction (Enhanced Input). Горячая клавиша в консоли — ~.

9. C++ в Unreal Engine

Для серьёзных проектов логику пишут на C++. Движок интегрирует C++ через макросы-разметку:

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Pickup.generated.h"

UCLASS()
class MYGAME_API APickup : public AActor
{
    GENERATED_BODY()

public:
    APickup();

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pickup")
    int32 PointValue = 10;

    UFUNCTION(BlueprintCallable, Category = "Pickup")
    void Collect();
};

Реализация в .cpp:

#include "Pickup.h"

void APickup::Collect()
{
    Destroy();
}
Большинство проектов используют гибрид: каркас и серверная логика на C++, а прототипы и UI — на Blueprints. Курс C++ даст языковую базу.

10. Физика и коллизии

Физика в UE5 — на движке Chaos. Основные понятия:

# Проверка в Blueprint
Cast to Character   # есть ли в зоне игры персонаж
Set World Location   # телепорт объекта
Add Impulse          # пинок физическому объекту
Физическая симуляция капризна: объект может «проваливаться» сквозь тонкие стены. Для декора используй Collision Enabled = Query Only (Overlap), для твёрдых тел — полноценные коллизии.

11. UI (UMG) и простые эффекты

Интерфейс (HUD, меню) создаётся в Widget Blueprint (UMG):

  1. Content Browser → ПКМ → User Interface → Widget Blueprint.
  2. Перетащи на холст панель Canvas Panel и текст Text Block.
  3. В Event Graph выведи Set Text узлом из переменной «очки».
  4. Добавь виджет персонажу через Create Widget и Add to Viewport.

Эффекты частиц — система Niagara: Content Browser → ПКМ → FX → Niagara System, выбери шаблон-эмиттер (огонь, искры, дым) и добавь на уровень.

Звук: перетащи .wav/.mp3 в Content Browser, затем подключи узлом Play Sound 2D к событию (например, к сбору предмета).

12. Сборка и пакинг игры

Сохранённый уровень нужно собрать в готовую игру:

  1. File → Package Project → выбери платформу (Windows, Android, Linux).
  2. Укажи папку сборки — движок соберёт программы и упакует ассеты.
  3. Для C++-проектов первая компиляция долгая — это нормально.
# Консольная сборка C++-проекта (требуется Visual Studio / Xcode)
"The Unreal Engine" Build -projectfiles -game

Лучшие практики проекта:

13. Ландшафт и наполнение уровней

Пустая плоская сцена не раскрывает движок. Заполните уровень реалистичным окружением — горами, деревьями и травой.

  1. Ландшафт: вкладка Landscape на панели инструментов — «скульптинг» высот кистью по карте выдавливания.
  2. Материал земли: Material Blend с несколькими слоями (трава, камни, грязь) по маске высоты.
  3. Foliage: кисть растительности рисует деревья и кусты по поверхности, расставляя их тысячи за минуту.
  4. Вода: готовые Water Body (озеро, река) из плагина Water — нарисуйте и настройте прозрачность.
# Параметры кисти ландшафта
Brush Size      # радиус кисти (удерживайте Shift для сглаживания)
Brush Falloff   # мягкость краёв
Strength        # сила подъёма/опускания
Отделяйте лист фолиажа от геометрии: деревья с выключенной коллизией дешевле, а кучу объектов группируйте в один Instanced-актёр.
Маленький уровень с правильным наполнением выглядит лучше огромной пустой карты. Качество сцены — это детали на сравнительно компактной площади.

14. Оптимизация: Nanite, Lumen, LOD

UE5 даёт технологии, которые сами решают часть задач производительности, но требует осознанных настроек.

ТехнологияЧто делает
Naniteрендерит миллионы треугольников без ручных LOD
Lumenглобальное освещение в реальном времени
LODавтозамена детализации на расстоянии
Level Streamingзагрузка частей уровня по необходимости

Правила: статичные меши в Nanite (через опции Import), освещение — через Lumen с разумным числом источников, динамические объекты — только там, где нужны.

Stat FPS        # частота кадров
Stat GPU        # загрузка видеокарты
Stat Memory     # использование памяти
Nanite не работает с материалами, где есть прозрачность и масштабируемые нормали, а Lumen дороже на слабых картах. Для низкого сегмента используйте статическое освещение.
Профилируйте на реальном устройстве или в сборке — в редакторе показатели лучше, чем в готовой игре.

15. Командная работа и плагины

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

# Полезные команды для работы с версиями
git lfs install
git lfs track "*.uasset"
git lfs track "*.umap"
Коммитьте до долгих экспериментов: «потерянный Spring Level» не восстановится из бэкапа, которого нет.
Перед мержем уровней сохраните версию, отключите свои плагины, а конфликтные ассеты восстанавливайте из последнего общего снэпшота.

16. Камера от третьего лица: Spring Arm

Для персонажа от третьего лица стандарт UE5 — SpringArmComponent: он удерживает камеру на заданном расстоянии, гасит тряску пружиной и не даёт камере провалиться в стены.

1. Добавьте на персонажа SpringArm + CameraComponent
2. Target Arm Length ≈ 300–400, Socket Offset для смещения
3. Включите Camera Rotation Lag — для плавного следования
4. Управляйте вращением камеры через контроллер
Не вращайте саму камеру напрямую: контроллер ворочает Pawn, а Spring Arm следует за ним — иначе камера «прыгает» при столкновениях.
Держите высоту камеры и наклон избыточными к уровню: чуть выше — и вы уже не «упираетесь в спину» у стен.

17. Анимации персонажа: Anim BP, Blend Space, Control Rig

Скелетные анимации в UE5 соединяются анимационным графом (Anim BP): состояния, переходы и смешивание кадров по скорости движения.

1. Импортируйте скелет + ассеты анимаций (Walk, Run, Jump)
2. Создайте Anim BP и Blend Space по вектору скорости
3. Добавьте переходы состояний (Idle → Walk → Run)
4. Control Rig — для ручных правок поз и осанки
Один граф на персонажа с переиспользованием анимаций дешевле, чем отдельный Anim BP на каждый клон.
Следите за стыками кадров на смешивании: проскальзывание ног лечится настройкой скорости Blend Space, а не подбором клипов.

18. ИИ врагов: AI Controller, Behavior Tree, Blackboard

Умный враг собирается из трёх деталей: AI Controller владеет персонажем, Blackboard хранит общие факты (цель, точка патруля), а Behavior Tree решает, что делать дальше.

1. Создайте Blackboard: ключи TargetActor, HomeLocation
2. Behavior Tree: Patrol → Sense → SetTarget → Chase → Attack
3. AI Controller настраивает движения и детект (AIPerception)
4. Назначьте AI Controller в классе персонажа
Не держите «железную» логику внутри Behavior Tree: узлы с тяжёлыми вычислениями тормозят и плохо читаются — пусть узлы дёргают функции из кода.
Тестируйте ИИ на двух случаях: враг, который «не нашёл» игрока, и враг, который мгновенно «прозрел» — расхождение в чувствах увидите сразу.

19. Готовый контент: Megascans, Fab и Marketplace

Не весь контент нужно моделировать самим: библиотека Quixel Megascans и каталог Fab дают готовые ассеты — от сканов природы до строений и звуков.

1. Откройте Fab/Library в редакторе
2. Скачайте ассет в проект
3. Проверьте лицензию и требования движка
4. Перетащите из Content Browser на уровень

Готовые ассеты экономят дни, но несут риски: риск кривых полигональных счётчиков и конфликтующих материалов. Заведите папку «ThirdParty» и отмечайте происхождение в описании проекта.

Перед коммерческим использованием проверяйте лицензию каждого ассета: у части каталога есть ограничения на перепродажу и указание авторства.
Соберите «стопку» ассетов до начала работы над сценой: выбор контента влияет на план уровня и ритм работы.

20. GAS: способности, эффекты и модификаторы

Gameplay Ability System (GAS) — фреймворк для RPG-логики: способности (abilities), эффекты (effects), атрибуты и модификаторы. Хоть он сложен, в серьёзных проектах это «стандарт де-факто», потому что несёт всю «игрологию» наружу.

AbilitySystemComponent — хит-ден героя
UAttributeSet        — HP, Stamina, Damage
GameplayEffect       — баффы/дебаффы (коэффициенты)

Пример: урон = BaseDamage + Damage * Power
              с проверкой стаков и приоритетов

Начинать с GAS стоит не в первом проекте, но лучшие практики сообщества (GASDocumentation) подскажут структуру, которую вы будете благодарить в месяц 12.

Прототипируйте с простыми GameplayEffects: понять парадигму можно на трёх способностях, а не на сорока.
GAS — стандарт, но тяжёлый: для простого экшена он перевесит выгоду. Оцените сложность игры до внедрения.
Связь с UI: экспозиция атрибутов в UMG-виджеты исключает гонки анимаций — данные не пересчитываются дважды.

21. Material Functions и Decals

Сложный материал тянется на десятки нод — это трудно читать и переиспользовать. Два инструмента чистят материал: Material Functions (переиспользуемые «подпрограммы») и Decals (проекции текстур на поверхность).

Material Function: MF_Grime_Mask
  вход: WorldPosition, Intensity
  выход: маска для пыли/грязи по высоте

Decal (декаль): кровь, трасса, граффити
  проекция на стену без альбедо-переделки

В большом проекте функции — «библиотека стиля»: MF_Damage_V2 переиспользуется в десятках материалов, а декали решают VFX-детали.

Держите Material Functions в общей папке Materials/Functions и давайте чёткие имена — это общий «язык» команды, а не личные наработки.
Декаль поверх динамической геометрии иногда «дрожит»: настройте правильный depth bias и не спамьте на кривых поверхностях.
Для производительности декали ограничены по количеству: десятки одновременно на уровне — путь к падению FPS.

22. Level Streaming и World Partition

Огромный открытый уровень не влезает в память и билд целиком: решение — стриминг. Классика — подгружать тайлы/зоны по близости игрока; в UE5 добавился World Partition — автоматическое разбиение большого мира на ячейки.

Режимы:
- Level Streaming: вручную/по триггерам включать дополнительные уровни
- World Partition: мир делится на скейл-ячейки, загружаемые по сетке

Практика: большие открытые уровни строятся как World Partition,
          а интерьеры — отдельными уровнями со стримингом по двери

Правило: что-то должно быть «изначально видимо» — не двигайте «вечный» UI в стрим, а для физики и логики NPC считайте ячейки заранее.

Тестируйте стриминг на сценарии «телепорт из точки A в точку B»: мгновенно видны пропавшая геометрия и незагруженные ячейки.
При стриминге неиспользуемые актёры уходят из памяти: ссылки из других ячеек должны быть явными, иначе «дыры» в мире.

23. Мультиплеер: репликация и RPC

Сеть меняет всё: у каждого игрока своя копия мира, а изменения синхронизируются между ними через репликацию свойств и RPC (удалённые вызовы). Без понимания этих двух механизмов сетевую игру не построить.

// свойство реплицируется (обновляется у всех)
UPROPERTY(ReplicatedUsing = OnRep_Health)
float Health;

// RPC клиент → сервер (проталкивает действие)
UFUNCTION(Server, Reliable)
void FireWeapon();

// RPC сервер → клиенты (результат)
UFUNCTION(NetMulticast, Reliable)
void SpawnBlood(FVector Loc);

Правило доверия: никогда не двигайте «значимые» объекты с клиента без сервера — читерство и рассинхрон всегда рядом.

Прототип сети: два клиента локально (PIE 2–3 инстанса) — быстрая проверка до реальных серверов.
«Reliable» в сети значит «гарантированно доставлю (с задержкой)» — не злоупотребляйте: перегрузка канала роняет пинг всей игры.
Производительность: репликация каждого тика — путь к лагам; интерполируйте позиции на клиенте, а реплицируйте «пунктиром».

Что дальше

Освоив основы UE5, углуби язык для игровой логики — курс C++ научит классам, указателям и STL. Для 3D-моделей и текстур к уровням подойдёт Blender, а для организации командной разработки — GitLab.

← Вернуться к курсам