Долгосрочный инженерный проект · новый стандарт, начат с нуля

UE C++ Academy — не справочник, а инженерная школа Unreal Engine

Каждая тема объясняет не «что использовать», а «почему это существует», «какую проблему решает», «как устроено внутри» и «когда так делать нельзя». Цель — чтобы после прочтения темы не оставалось логичного вопроса без ответа, и чтобы ты научился сам приходить к архитектурным решениям Epic, а не запоминал их как список фактов.

Как построена каждая тема

Гибкий стандарт: 11 обязательных разделов для любой темы + разделы, которые появляются автоматически, если тема их естественно порождает — без искусственных пунктов вроде «влияние на Multiplayer» у статьи про const.
Что это?
Короткая ориентирующая формулировка перед глубоким погружением.
Почему существует?
Проблема → причина, а не факт без контекста.
Какую проблему решает?
Конкретный, воспроизводимый сценарий поломки наивного подхода.
Как устроено?
Ограничения → архитектурное решение → реализация, с примерами из Engine Source.
Когда использовать / нельзя
Границы применимости — без них тема порождает карго-культ.
Примеры
Полностью рабочий код с построчным разбором — псевдокод запрещён.
Типичные ошибки
Отдельно для новичков и middle, с объяснением механизма поломки.
Практика
Задания, заставляющие воспроизвести рассуждение, а не скопировать пример.
FAQ
Вопросы, которые реально возникают у внимательного читателя.
Итоги
Утверждения, которые читатель должен суметь произнести своими словами.
+ по необходимости
GC, Reflection, Blueprint, Multiplayer, сериализация, производительность — если тема их естественно порождает.

Прежде чем начать

Компас поверх всего курса — не тема, а способ мышления, который повторяется в каждой следующей теме.
💡
Двенадцать сквозных «Почему» (UObject, указатели, GC, Reflection, Component, Composition, Modules, Plugins, Subsystem, Gameplay Tags, Data Assets, Primary Assets) в одном месте — прочитай эту страницу первой, и дальше каждая новая тема курса будет опознаваться как вариация уже знакомого рассуждения, а не новый набор фактов.

Эталонная статья

Золотой стандарт качества и глубины для всего проекта — с неё стоит начать, даже если ты уже опытный разработчик.
Engine → Framework → почему UObject → почему Reflection → почему Garbage Collector → почему появились макросы → как всё это связано в одну цепочку причин. После этой статьи остальные темы курса читаются не как отдельные факты, а как применение одного и того же способа рассуждения.

Дорожная карта — 9 уровней

Девять последовательных уровней вместо шестнадцати разрозненных кластеров — каждый следующий уровень объясняется через предыдущий, а не сам по себе. Единственное исключение — Level 5: шесть его прикладных систем идут параллельно, а не по порядку.
0
Level 0 — Как мыслит Unreal
Зачем вообще существует остальной курс: когда документации Epic ещё достаточно, а когда пора открывать исходники движка, и как физически ориентироваться в .h/.cpp-файлах ещё до того, как ты узнал, что такое UObject.
1
Level 1 — Object System
Опирается на Level 0 — после него любой UCLASS()/UPROPERTY() объясняется как конкретное следствие Reflection, Garbage Collector, Package и CDO, а не как магический синтаксис.
2
Level 2 — Объекты рантайма
Опирается на Object System — сначала сам Actor и его компоненты, и только когда естественно возникает вопрос «как хранить список компонентов», инструменты: TArray/TMap и два непересекающихся мира указателей.
3
Level 3 — Gameplay Framework
Опирается на Level 2 — полный состав ролей фреймворка (Pawn/Controller/Character/GameMode/GameState/GameInstance/Subsystem) и Delegates как инструмент, до того как AI/UI/GAS начнут молча на них полагаться.
4
Level 4 — Data
Опирается на UObject и мягкие ссылки — как описывать растущий контент данными, а не кодом, до того как GAS и AI начнут на этом строиться.

Level 5 — Systems

Шесть параллельных прикладных систем, а не последовательность — порядок между 5.A–5.F не жёсткий, каждая опирается только на Level 0–4 (и Network Prediction в GAS — ещё и на Level 6, Multiplayer).
5A
5.A — Input
Как игровое намерение отделяется от физической клавиши: Input Actions и Mapping Contexts вместо жёстко зашитых Action/Axis Mappings.
5B
5.B — UI
Как строится интерфейс через UMG, как управлять стеком экранов и фокусом через CommonUI, и как разорвать прямую связь виджета с игровыми объектами через MVVM.
5C
5.C — Gameplay Ability System
Фреймворк способностей поверх UFUNCTION: сеть, отмена, стоимость ресурсов и совместимость эффектов одним согласованным решением — вплоть до Network Prediction на стыке с Multiplayer.
5D
5.D — AI
Как решение «что делать NPC» выражается деревом переиспользуемых нод, как задачи и дерево обмениваются данными через общее хранилище, и как декларативно искать лучшую точку в мире.
5E
5.E — World Streaming
Как игровой мир, физически не помещающийся в память целиком, загружается по частям: вручную, автоматически по сетке, и логическими слоями поверх неё.
5F
5.F — Animation
Как логика позы скелета выделяется в отдельный объект с собственным графом, как одноразовые действия проигрываются поверх постоянного блендинга, и как поза адаптируется к геометрии в рантайме.
6
Level 6 — Multiplayer
Опирается на UPROPERTY и Owner/GetOwner() — сервер и клиент видят один и тот же актор по-разному, и этого достаточно, чтобы вернуться и по-настоящему закрыть Network Prediction из Level 5.
7
Level 7 — Engine Internals
Новый уровень целиком — что происходит с проектом между «написал код» и «игрок запустил exe»: Header Tool, UnrealBuildTool, модули, плагины, сериализация, Cook, рантайм-загрузка, потоки и аллокаторы памяти.
8
Level 8 — Production
Новый уровень целиком, завершающий курс — как не только писать код, но и диагностировать и чинить существующий, держать бюджет кадра, сохранять прогресс и структурировать проект, который переживёт больше одного разработчика.

Afterword — сквозные статьи

Не новый материал, а экзамен на то, умеешь ли ты видеть систему целиком: пять статей связывают всё, что было изучено по отдельности, в сквозные истории — от нажатия клавиши до кадра на экране, от запуска процесса до полного жизненного цикла игры.
Afterword — Engineering Flows
Опирается на весь курс целиком — каждая статья проходит один сквозной путь через события, изученные по отдельности в Level 0–8, и складывает их в одну проверяемую по исходникам хронологию.

Примени всё вместе

Пройти 9 уровней изолированно достаточно, чтобы понять каждую идею — недостаточно, чтобы почувствовать, как десятки таких идей уживаются в одном живом классе. Второй, параллельный трек курса — один и тот же персонаж, растущий вместе с прохождением уровней.
🎮
Один непрерывно растущий проект вместо шестнадцати параллельных вех — почти каждый уровень добавляет реальную, работающую часть той же самой игры выживания: от голого Actor и компонентов через Enhanced Input, DataAsset-предметы, UMG/MVVM, Multiplayer, GAS-способности и AI-противника до сохранения и профилирования, с обязательным условием: решения прошлых шагов не переписываются тихо, только через осознанный рефакторинг — так же, как в настоящем проекте.

Теги

#engine #framework #uobject #reflection #garbage-collector #upropety #owner #architecture #actor #component #ufunction #uinterface #blueprint #smart-pointers #soft-reference #multiplayer #rpc #pawn #controller #gamemode #delegates #tarray #tmap #containers #input #gas #attributeset #gameplayeffect #prediction #umg #commonui #mvvm #gameplaytags #dataasset #datatable #assetmanager #behaviortree #blackboard #eqs #levelstreaming #worldpartition #datalayer #animinstance #animmontage #ik #documentation #source-reading #dependencies #cdo #outer #eobjectflags #fname #package #asset-registry #transform #tick #spawnactor #uworld #character #gameinstance #subsystem #relevancy #dormancy #unreal-header-tool #hot-reload #unrealbuildtool #modules #plugins #farchive #cooker #async-loading #threading #game-thread #fmalloc #uelog #visual-logger #gameplay-debugger #draw-debug #unreal-insights #stat-commands #tick-optimization #taskgraph #profiling #savegame #god-class #ustruct #tsubclassof #cast #newobject #memory-layout #world-context #tactoriterator #collision #linetrace #chaos #playercontroller #localplayer #gameplaystatics #primarydataasset #config #developersettings #input-subsystem #slate #widget-lifecycle #commoninput #executioncalculation #modifiermagnitudecalculation #gameplaycue #aiperceptioncomponent #navmesh #smartobjects #pcg #foliage #hlod #nanite #lumen #state-machine #blendspace #linked-anim-layers #motion-warping #root-motion #animinstanceproxy #actor-channel #netdriver #replayout #replicationgraph #fastarrayserializer #client-side-prediction #netmode #seamlesstravel #action-graph #unrealheadertool #target-cs #compilation-pipeline #generated-h #live-coding #packaging #pluginmanager #fmemory #cache-line #tarray-memory #tsparsearray #trace #trace-channel #csv-profiler #ai-debugging #llm #gpu-profiling #frame-analysis #composition #singleton-alternative #observer-pattern #factory-pattern #command-pattern #dependency-injection #engine-lifecycle #streamable-manager #activateability #frame-pipeline #repnotify

Как использовался старый проект

Прежний проект (папка на уровень выше) не удалён и остаётся справочным материалом — источником идей, готовых объяснений и примеров кода. Ни одна статья здесь не является копией: каждая тема анализируется заново, проверяется, дополняется и приводится к единому стандарту, описанному выше.