Un projet d'ingénierie à long terme · une nouvelle norme, construite à partir de zéro

UE C++ Academy — pas une référence, mais une école d'ingénierie pour Unreal Engine

Chaque sujet explique non pas « quoi utiliser », mais « pourquoi cela existe », « quel problème cela résout », « comment cela fonctionne en interne » et « quand ne pas le faire ». L'objectif est qu'après avoir lu un sujet, aucune question logique ne reste sans réponse, et que vous appreniez à aboutir vous-même aux décisions architecturales d'Epic, plutôt que de les mémoriser comme une liste de faits.

Comment chaque sujet est structuré

Un standard flexible : 11 sections obligatoires pour tout sujet + des sections qui apparaissent automatiquement si le sujet les génère naturellement — sans éléments artificiels tels que « Impact sur le multijoueur » dans un article sur const.
Qu'est‑ce ?
Une courte déclaration d'orientation avant la plongée profonde.
Pourquoi cela existe ?
Problème → cause, pas un fait sans contexte.
Quel problème cela résout ?
Un scénario spécifique et reproductible où l'approche naïve casse.
Comment cela fonctionne ?
Contraintes → solution architecturale → implémentation, avec des exemples tirés du code source du moteur.
Quand utiliser / ne pas utiliser
Les limites d'applicabilité — sans elles, un sujet engendre un culte du cargo.
Exemples
Code entièrement fonctionnel avec une explication ligne par ligne — le pseudo-code est interdit.
Erreurs fréquentes
Séparément pour les débutants et les développeurs intermédiaires, en expliquant le mécanisme de l'échec.
Mise en pratique
Des exercices qui obligent à reproduire le raisonnement, pas seulement à copier l'exemple.
FAQ
Les questions qui surgissent réellement pour un lecteur attentif.
Résumé
Les affirmations que le lecteur devrait pouvoir formuler avec ses propres mots.
+ selon les besoins
GC, Reflection, Blueprint, Multijoueur, sérialisation, performances — si le sujet les génère naturellement.

Avant de commencer

Une boussole sur l'ensemble du cours — pas un sujet, mais une manière de penser qui se répète dans chaque sujet suivant.
💡
Douze « Pourquoi » transversaux (UObject, pointeurs, GC, Reflection, Component, Composition, Modules, Plugins, Subsystem, Gameplay Tags, Data Assets, Primary Assets) en un seul endroit — lisez cette page en premier, et dès lors, chaque nouveau sujet du cours sera reconnu comme une variation d'un raisonnement familier, plutôt qu'un nouvel ensemble de faits.

Article de référence

L'étalon-or de qualité et de profondeur pour tout le projet — cela vaut la peine de commencer par là, même si vous êtes déjà un développeur expérimenté.
Moteur → Framework → pourquoi UObject → pourquoi la Reflection → pourquoi le Garbage Collector → pourquoi les macros sont apparues → comment tout cela se connecte en une seule chaîne de causes. Après cet article, les autres sujets du cours ne sont pas lus comme des faits séparés, mais comme des applications de la même manière de raisonner.

Feuille de route — 9 Niveaux

Neuf niveaux séquentiels au lieu de seize clusters séparés — chaque niveau suivant est expliqué à travers le précédent, non en soi. La seule exception est le Niveau 5 : ses six systèmes appliqués sont parallèles, pas séquentiels.
0
Niveau 0 — Comment Unreal pense
Pourquoi le reste du cours existe : quand la documentation d'Epic est encore suffisante, et quand il est temps d'ouvrir le code source du moteur, et comment naviguer physiquement dans les fichiers .h/.cpp avant même de savoir ce qu'est un UObject.
1
Niveau 1 — Système Objet
S'appuie sur le Niveau 0 — après cela, tout UCLASS()/UPROPERTY() est expliqué comme une conséquence spécifique de la Reflection, du Garbage Collector, du Package et du CDO, non comme une syntaxe magique.
2
Niveau 2 — Objets d'exécution
S'appuie sur le Système Objet — d'abord l'Actor et ses composants, et seulement lorsque la question « comment stocker la liste des composants » surgit naturellement, les outils : TArray/TMap et les deux mondes non chevauchants de pointeurs.
3
Niveau 3 — Gameplay Framework
S'appuie sur le Niveau 2 — l'ensemble complet des rôles du framework (Pawn/Controller/Character/GameMode/GameState/GameInstance/Subsystem) et les Delegates comme outil, avant que l'IA/l'UI/le GAS ne commencent à s'appuyer silencieusement sur eux.
4
Niveau 4 — Données
S'appuie sur UObject et les références logicielles — comment décrire un contenu croissant sous forme de données, pas de code, avant que le GAS et l'IA ne commencent à être construits dessus.

Niveau 5 — Systèmes

Six systèmes appliqués parallèles, pas une séquence — l'ordre entre 5.A–5.F n'est pas strict, chacun s'appuie seulement sur les Niveaux 0–4 (et Network Prediction dans GAS aussi sur le Niveau 6, Multijoueur).
5A
5.A — Entrée (Input)
Comment l'intention de gameplay est séparée de la touche physique : Input Actions et Mapping Contexts au lieu de Action/Axis Mappings codés en dur.
5B
5.B — Interface Utilisateur (UI)
Comment construire une interface avec UMG, comment gérer la pile d'écrans et le focus avec CommonUI, et comment rompre la connexion directe entre le widget et les objets du jeu avec MVVM.
5C
5.C — Gameplay Ability System
Un framework d'abilités au-dessus de UFUNCTION : mise en réseau, annulation, coûts de ressource et compatibilité des effets dans une solution cohérente — jusqu'à Network Prediction à l'intersection avec le Multijoueur.
5D
5.D — IA
Comment la décision de « ce que le PNJ doit faire » est exprimée comme un arbre de nœuds réutilisables, comment les tâches et l'arbre échangent des données via un stockage partagé, et comment trouver déclarativement le meilleur point dans le monde.
5E
5.E — World Streaming
Comment un monde de jeu qui ne tient pas physiquement en mémoire dans son ensemble est chargé par parties : manuellement, automatiquement par grille, et avec des couches logiques par-dessus.
5F
5.F — Animation
Comment la logique de pose squelettique est séparée dans son propre objet avec son propre graphe, comment les actions one-shot sont jouées par-dessus le blending continu, et comment la pose s'adapte à la géométrie en temps réel.
6
Niveau 6 — Multijoueur
S'appuie sur UPROPERTY et Owner/GetOwner() — le serveur et le client voient le même acteur différemment, et cela suffit pour revenir en arrière et véritablement boucler Network Prediction du Niveau 5.
8
Niveau 8 — Production
Un niveau complètement nouveau, concluant le cours — comment non seulement écrire du code, mais aussi diagnostiquer et corriger du code existant, respecter le budget de frame, sauvegarder la progression et structurer un projet qui survivra à plus d'un développeur.

Postface — articles de bout en bout

Pas du nouveau matériel, mais un examen pour voir si vous pouvez percevoir le système comme un tout : cinq articles relient tout ce qui a été étudié séparément en histoires de bout en bout — de l'appui sur une touche à une frame à l'écran, du lancement du processus au cycle de vie complet du jeu.
Postface — Flux d'ingénierie
S'appuie sur l'ensemble du cours comme un tout — chaque article trace un chemin de bout en bout à travers des événements étudiés séparément dans les Niveaux 0–8, les assemblant en une chronologie unique vérifiable dans le code source.

Mettez tout cela en pratique

Parcourir les 9 niveaux isolément suffit pour comprendre chaque idée — pas assez pour ressentir comment des dizaines de telles idées coexistent dans une seule classe vivante. La deuxième voie, parallèle, du cours — le même personnage, grandissant au fil de la progression dans les niveaux.
🎮
Un projet unique en croissance continue au lieu de seize jalons parallèles — presque chaque niveau ajoute une pièce réelle et fonctionnelle du même jeu de survie : d'un Actor nu et de composants, en passant par Enhanced Input, les items DataAsset, UMG/MVVM, le multijoueur, les abilités GAS et l'ennemi IA, jusqu'à la sauvegarde et au profilage, avec la condition obligatoire que les décisions des étapes précédentes ne soient pas réécrites silencieusement, seulement via un refactoring explicite — exactement comme dans un projet réel.

Tags

#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

Comment l'ancien projet a été utilisé

Le projet précédent (le dossier un niveau au-dessus) n'a pas été supprimé et reste comme matériel de référence — une source d'idées, d'explications toutes faites et d'exemples de code. Aucun article ici n'est une copie : chaque sujet est analysé à nouveau, vérifié, complété et amené au standard commun décrit ci-dessus.