Sélection rapide d'équipement, mort par chute, fixes inventaire/audio
- Ajoute le menu de sélection rapide (WB_QuickSelect, IA_QuickSelectAGIS/IA_QuickEquipAGIS) et l'écran de mort (WB_YouDied) sur Inventory_Player. - Corrige le mauvais placement des items dans les slots d'équipement (désalignement entre PlayerInventoryPart1/2 et les widgets d'équip slot). - Corrige le bourdonnement audio permanent causé par une double instance de Ultra_Dynamic_Weather créée en PIE. - Renomme Systems/Blueprints/d/SandboxCharacter_CMC_ABP vers son bon dossier. - Met à jour Architecture_Projet.md et ajoute le skill de maintenance associé. - Inclut le fix de config audio (DefaultEngine.ini) et les changements de config moteur associés. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f2b51093fc
commit
d29748b8ab
34 files changed
+650
-123
No files matched your search
@@ -0,0 +1,70 @@
|
||||
---
|
||||
name: maintain-architecture-doc
|
||||
description: Maintient Architecture_Projet.md (documentation de référence de l'architecture du projet ProjectF) synchronisé avec la structure réelle du projet. À utiliser avant et après toute création, suppression, déplacement ou renommage de fichier/dossier, ou toute évolution significative d'un système de gameplay.
|
||||
---
|
||||
|
||||
# Maintenir `Architecture_Projet.md`
|
||||
|
||||
## Rôle de ce document
|
||||
|
||||
`Architecture_Projet.md` (à la racine du projet) est la **documentation de référence de l'architecture complète du projet ProjectF**, écrite en priorité pour des modèles d'IA. Il décrit l'arborescence complète du projet, le rôle de chaque dossier/fichier important, les dépendances entre systèmes et les conventions à respecter.
|
||||
|
||||
**Ce document n'a de valeur que s'il reste synchronisé avec l'état réel du projet.** Un `Architecture_Projet.md` obsolète est pire qu'utile : il fait perdre du temps et induit en erreur les futures sessions d'IA qui lui font confiance.
|
||||
|
||||
## Quand utiliser ce skill
|
||||
|
||||
Utilise ce skill (consultation et/ou mise à jour) dans les cas suivants :
|
||||
|
||||
1. **Avant** de modifier la structure du projet de façon un peu conséquente (créer un nouveau système, réorganiser un dossier, migrer des assets) : lis `Architecture_Projet.md` pour comprendre où les choses vivent actuellement et où ton changement doit s'insérer, en cohérence avec les conventions déjà en place (voir §1.4/§1.5 du document).
|
||||
2. **Après** toute action qui change la structure du projet, notamment :
|
||||
- création d'un fichier ou dossier important (Blueprint, Widget, DataAsset, Struct, Enum, Input Action, système de gameplay…) ;
|
||||
- suppression d'un fichier ou dossier documenté ;
|
||||
- déplacement d'un fichier ou dossier documenté ;
|
||||
- renommage d'un fichier ou dossier documenté ;
|
||||
- évolution suffisamment importante d'un système existant (nouvelle responsabilité, nouveau fichier central, changement de dépendances entre systèmes).
|
||||
3. Quand tu n'es pas sûr de savoir où se trouve un système ou un type de fichier avant de commencer une tâche — consulte le document plutôt que d'explorer le projet à l'aveugle.
|
||||
|
||||
Pour une petite modification purement interne à un Blueprint déjà documenté (ajouter une fonction, une variable, corriger un bug de logique) qui ne change ni son rôle général ni l'arborescence, une mise à jour du document n'est en général PAS nécessaire — sauf si la description existante du fichier devient trompeuse.
|
||||
|
||||
## Comment mettre à jour le document
|
||||
|
||||
1. **Localise la bonne section.** Le document est organisé par grande zone (`§3 Content/Core/`, `§4 Content/Systems/`, `§5 Content/Data/`, `§6 Content/UI/`, `§7 Items/PCG/Maps/VFX/Prop`, `§8 assets tiers`). Trouve la section correspondant au dossier concerné avant d'éditer — ne duplique pas une entrée dans plusieurs sections.
|
||||
|
||||
2. **Fichier créé** → ajoute une ligne dans l'arborescence du dossier concerné, avec une description courte (une phrase, orientée "à quoi ça sert" / "quel rôle" — pas une paraphrase du nom de fichier). Suis le format déjà utilisé :
|
||||
```text
|
||||
├── NomDuFichier.uasset → Rôle en une phrase.
|
||||
```
|
||||
Si le fichier crée un nouveau sous-système notable, ajoute-le aussi à la vue de dépendances (§1.3) si pertinent.
|
||||
|
||||
3. **Fichier/dossier supprimé** → retire entièrement son entrée. Ne laisse jamais une ligne qui référence un chemin qui n'existe plus. Si sa suppression change une dépendance décrite en §1.3, corrige aussi cette section.
|
||||
|
||||
4. **Fichier/dossier déplacé ou renommé** → corrige le chemin (et le nom) à l'endroit où il apparaît. S'il change de section logique (ex. un Blueprint qui quitte `Systems/Inventory/` pour un nouveau dossier `Systems/Crafting/`), déplace aussi son entrée dans la bonne section du document, pas seulement son chemin.
|
||||
|
||||
5. **Nouveau système de gameplay** (nouveau dossier sous `Content/Systems/<Nom>/` ou équivalent) → crée une nouvelle sous-section dans `§4` (ou une nouvelle section de premier niveau si le système est majeur), avec :
|
||||
- la liste de ses fichiers importants et leur rôle ;
|
||||
- ses dépendances avec les autres systèmes, ajoutées à `§1.3` si le système interagit avec l'inventaire, les stats, ou le personnage.
|
||||
|
||||
6. **Évolution significative d'un système existant** → mets à jour sa description pour refléter son rôle actuel. Ne laisse pas une description qui décrit un comportement qui n'existe plus.
|
||||
|
||||
7. **Nouveau dossier d'assets tiers volumineux** (Marketplace, Fab, packs d'animation…) → ajoute-le en `§8` avec une description sommaire d'une ligne, SANS lister ses fichiers individuellement (voir règle de détail ci-dessous).
|
||||
|
||||
## Règle de niveau de détail
|
||||
|
||||
- Un fichier "important" à documenter individuellement = il porte de la **logique ou des données de gameplay** propres au projet (Blueprint, Widget, ActorComponent, DataAsset, Struct, Enum, Input Action, GameMode/PlayerController, système PCG…).
|
||||
- Un fichier purement artistique (texture, mesh, clip d'animation individuel, matériau de variante, miniature) n'a **pas** besoin d'entrée dédiée : il suffit que son dossier parent soit listé et décrit brièvement. Ne gonfle pas le document en énumérant chaque texture d'un pack d'assets.
|
||||
- Un dossier d'assets tiers volumineux (Marketplace, Megascans, packs de mocap) est décrit en une ligne (`§8`), pas détaillé fichier par fichier.
|
||||
|
||||
## Vérification de cohérence
|
||||
|
||||
Avant de terminer une tâche qui a touché à la structure du projet, vérifie que :
|
||||
|
||||
- chaque chemin mentionné dans `Architecture_Projet.md` correspondant à ta zone de travail existe toujours réellement (pas de faux positif après un déplacement/renommage que tu aurais oublié de répercuter) ;
|
||||
- les nouveaux fichiers importants que tu as créés apparaissent bien dans le document, avec une description ;
|
||||
- les fichiers que tu as supprimés n'apparaissent plus nulle part dans le document (y compris dans `§1.3` Dépendances et dans les tableaux de conventions si applicable) ;
|
||||
- si tu as un doute sur l'exhaustivité, un simple `find <dossier> -type f` (ou `Glob`) suffit à comparer rapidement la réalité du dossier concerné avec ce que le document décrit — inutile de ré-auditer tout le projet à chaque fois, seulement la zone que tu viens de modifier.
|
||||
|
||||
## Ce qu'il ne faut jamais faire
|
||||
|
||||
- Ne jamais terminer une tâche qui a modifié la structure du projet (création/suppression/déplacement/renommage de fichier ou dossier important, nouveau système) sans avoir mis à jour `Architecture_Projet.md` en conséquence.
|
||||
- Ne jamais laisser une description qui ne correspond plus à la réalité "parce que ce n'est pas grave" — un document d'architecture légèrement faux est plus dangereux qu'un document incomplet mais honnête.
|
||||
- Ne jamais dupliquer une entrée dans deux sections différentes du document après un déplacement (supprime l'ancienne en ajoutant la nouvelle).
|
||||
+485
-67
@@ -1,77 +1,495 @@
|
||||
# 🏗️ Architecture du Projet — ProjectF
|
||||
|
||||
*Projet Unreal Engine 5 — Vue d'ensemble de l'arborescence*
|
||||
|
||||
```
|
||||
ProjectF/
|
||||
│
|
||||
├── 📄 .gitattributes # Règles Git (LFS, line-ending)
|
||||
├── 📄 .gitignore # Fichiers ignorés par Git
|
||||
├── 📄 .mcp.json # Configuration MCP (Model Context Protocol)
|
||||
├── 📄 ProjectF.uproject # Fichier principal du projet UE5
|
||||
├── 📄 README.md # Documentation du projet
|
||||
│
|
||||
├── ⚙️ Config/ # Configuration du moteur et du jeu
|
||||
│ ├── 📁 Layouts/ # Dispositions d'éditeur (workspaces)
|
||||
│ ├── 📄 DefaultEditor.ini # Paramètres de l'éditeur UE
|
||||
│ ├── 📄 DefaultEngine.ini # Configuration du moteur (rendu, physique…)
|
||||
│ ├── 📄 DefaultGame.ini # Réglages du jeu (classes par défaut, tags…)
|
||||
│ ├── 📄 DefaultGameplayTags.ini # Tags GameplayFramework
|
||||
│ └── 📄 DefaultInput.ini # Mappage des entrées clavier/souris/manette
|
||||
│
|
||||
├── 🎨 Content/ # Assets du jeu (UAsset, Blueprints, Maps…)
|
||||
│ │
|
||||
│ ├── 📁 Animations/ # Clips et séquences d'animation (8 éléments)
|
||||
│ ├── 📁 Audio/ # Sons, musiques, SoundCues (vide)
|
||||
│ ├── 📁 Characters/ # Blueprints et meshes des personnages (2 éléments)
|
||||
│ ├── 📁 Collections/ # GameplayCollection pour regroupement d'assets (vide)
|
||||
│ ├── 📁 Core/ # Assets fondamentaux du jeu (3 éléments)
|
||||
│ ├── 📁 Data/ # Tables de données, DataAssets, CurveTables (4 éléments)
|
||||
│ ├── 📁 Developers/ # Outils et assets de développement (1 élément)
|
||||
│ ├── 📁 Fab/ # Assets générés ou importés via Fab (5 éléments)
|
||||
│ ├── 📁 Items/ # Objets interactifs, pickups, inventaire (27 éléments)
|
||||
│ ├── 📁 Maps/ # Niveaux et niveaux de streaming (1 élément)
|
||||
│ ├── 📁 Misc/ # Assets divers sans catégorie spécifique (1 élément)
|
||||
│ ├── 📁 Prop/ # Props statiques et décoratifs (1 élément)
|
||||
│ ├── 📁 Systems/ # Systèmes de jeu : GameMode, PlayerController… (10 éléments)
|
||||
│ ├── 📁 Thumbnails/ # Prévisualisations et icônes d'assets (3 éléments)
|
||||
│ ├── 📁 UI/ # Widgets UMG, menus, HUD (3 éléments)
|
||||
│ ├── 📁 VFX/ # Particules, Niagara, effets visuels (9 éléments)
|
||||
│ ├── 📁 __ExternalActors__/ # Actors créés dynamiquement hors éditeur
|
||||
│ └── 📁 __ExternalObjects__/ # Objets externes liés au projet
|
||||
│
|
||||
├── 🔧 .vscode/ # Configuration VS Code
|
||||
│ └── 📄 mcp.json # Configuration MCP pour VS Code
|
||||
│
|
||||
├── 🔧 .codex/ # Configuration Codex CLI
|
||||
│ └── 📄 config.toml # Paramètres Codex
|
||||
│
|
||||
├── 🔧 .cursor/ # Configuration Cursor IDE
|
||||
│ └── 📄 mcp.json # Configuration MCP pour Cursor
|
||||
│
|
||||
└── 🔧 .gemini/ # Configuration Gemini CLI
|
||||
└── 📄 settings.json # Paramètres Gemini
|
||||
```
|
||||
> **Ce document est la référence d'architecture du projet, destinée en priorité aux modèles d'IA (Claude, etc.) qui vont lire, modifier ou créer du contenu dans ce projet Unreal Engine.**
|
||||
> Il doit permettre de comprendre **où se trouve chaque système, quel fichier est responsable de quoi, et où ajouter du nouveau contenu** — sans avoir à explorer tout le projet à chaque session.
|
||||
>
|
||||
> ⚠️ **Ce document doit rester à jour.** Voir la section [10. Maintenir ce document à jour](#10-maintenir-ce-document-à-jour) et le skill `maintain-architecture-doc`.
|
||||
|
||||
---
|
||||
|
||||
## Dossiers exclus (générés automatiquement par Unreal Engine)
|
||||
## 1. Vue d'ensemble du projet
|
||||
|
||||
| Dossier | Raison de l'exclusion |
|
||||
|---|---|
|
||||
| `Intermediate/` | Fichiers intermédiaires de compilation |
|
||||
| `Saved/` | Sauvegardes, logs, captures, profils |
|
||||
| `Binaries/` | Exécutables et bibliothèques compilées |
|
||||
| `DerivedDataCache/` | Cache de données dérivées du moteur |
|
||||
### 1.1 Nature du projet
|
||||
|
||||
---
|
||||
- **Moteur** : Unreal Engine **5.8**.
|
||||
- **Aucun code C++** : il n'y a pas de dossier `Source/`. Tout le gameplay est écrit en **Blueprint visuel**, dans `Content/`.
|
||||
- **Genre** : jeu de survie / extraction en vue 3e personne avec un **inventaire en grille façon "Escape from Tarkov"** (armure, sac à dos, armes, munitions, craft sur feu de camp/fonderie, générateurs, lecteurs de carte magnétique, coffres, PNJ pillables, véhicules).
|
||||
- **Multijoueur** : le système d'inventaire est répliqué (RPC client/serveur visibles partout dans `Inventory_Player`, ex. `Request Switch Weapon SERVER`, `Disarm Request SERVER`). Le projet doit donc être pensé serveur-autoritaire pour tout ce qui touche à l'inventaire, aux stats et au combat.
|
||||
|
||||
## Résumé rapide
|
||||
### 1.2 Les grandes couches du projet
|
||||
|
||||
| Catégorie | Dossiers | Description |
|
||||
Le projet est construit par empilement de **trois grands blocs** de contenu, plus une couche d'outillage IA :
|
||||
|
||||
1. **Framework de personnage / locomotion ("Sandbox Character")** — `Content/Systems/Blueprints/`
|
||||
Basé sur le sample officiel Epic "Motion Matching" (plugins `Mover`, `MotionWarping`, `MotionTrajectory`, `Chooser`, `AnimationLocomotionLibrary`, `AnimationWarping`). Gère le mouvement, la caméra, le Motion Matching, le traversal (vault/mantle/climb), les modes de mouvement personnalisés. **Ce framework est en grande partie template/tiers** : n'y toucher qu'en connaissance de cause.
|
||||
|
||||
2. **Système d'inventaire AGIS** ("Advanced Grid Inventory System", asset marketplace) — `Content/Core/Coreinventory/`, `Content/Systems/Inventory/`, `Content/UI/Inventory_UI/`, `Content/Data/Inventory_Data/`.
|
||||
C'est le **cœur du gameplay** : inventaire en grille, équipement, craft, loot, sauvegarde. La quasi-totalité des systèmes de jeu ajoutés par l'équipe (stats, mort, sélection rapide d'équipement, interactables) se branchent sur ce système.
|
||||
|
||||
3. **Systèmes de jeu spécifiques au projet**, ajoutés par-dessus AGIS — `Content/Systems/Stats/`, `Content/Systems/Scent/`, `Content/Systems/Movable_Object/`, `Content/Systems/Door/`, `Content/PCG/`, `Content/Items/`, `Content/UI/Widgets/` (HUD, pause menu). C'est ici que la majorité des évolutions de gameplay futures doivent être ajoutées.
|
||||
|
||||
4. **Outillage IA** — plugins `VibeUE`, `EditorToolset`, `ModelContextProtocol`, `Terminal` (déclarés dans `ProjectF.uproject`) + `.mcp.json` à la racine. Ils exposent l'éditeur Unreal (Blueprints, Widgets, Input, PCG, Landscape, Niagara, etc.) à un serveur MCP local (`http://127.0.0.1:8000/mcp`) piloté par des agents Claude. **C'est le mécanisme par lequel un modèle d'IA lit/modifie ce projet** — voir la section [9. Notes pour les IA](#9-notes-pour-les-ia-pièges-connus-de-loutillage) pour les pièges connus.
|
||||
|
||||
En plus de cela, deux couches d'assets tiers volumineuses sont présentes mais **ne contiennent pas de logique de gameplay propre au projet** : le pack météo **UltraDynamicSky** (`Content/Systems/Weather/UltraDynamicSky/`) et diverses bibliothèques d'assets 3D Fab/Megascans/Quixel (`Content/Fab/`, `Content/Megaplant_Library/`, une bonne partie de `Content/Animations/` et `Content/Characters/`).
|
||||
|
||||
### 1.3 Dépendances principales entre systèmes
|
||||
|
||||
```
|
||||
Character (Pawn, géré par le framework "Sandbox Character")
|
||||
│
|
||||
├─ Composant Inventory_Player (Content/Core/Coreinventory/Inventory_Player)
|
||||
│ └─ hérite de Inventory_Equipper (équipement d'armes/objets)
|
||||
│ └─ hérite de Inventory__Main (cœur générique AGIS : slots, containers, réseau)
|
||||
│
|
||||
│ Inventory_Player pilote/possède :
|
||||
│ ├─ WB_InventoryScreen (UI d'inventaire complète, créée à la demande)
|
||||
│ │ └─ WB_InventoryPart1 / WB_InventoryPart2
|
||||
│ │ └─ WB_EquipSlot → WB_Container → WB_InventorySlot → WB_Item
|
||||
│ ├─ WB_QuickSelect (roue de sélection rapide d'équipement, 4 slots)
|
||||
│ └─ Les Input Actions IA_*AGIS via l'IMC_AGIS_Character / IMC_AGIS_InventoryTab
|
||||
│
|
||||
├─ Composant AC_Stats (Content/Systems/Stats/AC_Stats)
|
||||
│ └─ Vie, mort (OnDeath), Revive → déclenche WB_YouDied et le respawn du Character
|
||||
│
|
||||
├─ Composants de mouvement (Content/Systems/Movement/, Systems/Blueprints/MovementModes/)
|
||||
│ └─ AC_ClimbingComponent, AC_Cover, AC_TraversalLogic, AC_PreCMCTick, AC_VisualOverrideManager…
|
||||
│
|
||||
└─ Autres composants gameplay (AC_ScentPoint, etc.)
|
||||
|
||||
Interactables (Content/Systems/Inventory/Interactables/*)
|
||||
└─ Implémentent BPI_Interactable, exposent un inventaire via un composant
|
||||
Inventory_Storage / Inventory_Vendor / Inventory_Crafting (mêmes bases AGIS que le joueur)
|
||||
→ consultés par Inventory_Player lors d'une interaction (touche IA_InteractAGIS)
|
||||
|
||||
Données d'items (Content/Data/Inventory_Data/, Content/Items/)
|
||||
└─ DT_Items (DataTable), ItemDefaults / ItemInfo (structs), DD_Item (DataAsset par item)
|
||||
alimentent à la fois l'UI d'inventaire ET les Blueprints d'objets sous Content/Items/BP_Item_*
|
||||
```
|
||||
|
||||
### 1.4 Conventions de nommage des assets
|
||||
|
||||
| Préfixe | Signification | Exemple |
|
||||
|---|---|---|
|
||||
| **Contenu artistique** | Animations, Audio, Characters, Prop, VFX | Assets visuels et sonores |
|
||||
| **Design du jeu** | Items, Maps, Systems, Data | Logique et contenu de gameplay |
|
||||
| **Interface** | UI, Thumbnails | Éléments d'interface utilisateur |
|
||||
| **Infrastructure** | Core, Collections, Misc | Fondations techniques |
|
||||
| **Outils** | Developers, Fab | Ressources de développement |
|
||||
| `BP_` | Blueprint d'acteur | `BP_Campfire`, `BP_Item_Helmet` |
|
||||
| `WB_` / `WBP_` | Widget Blueprint (UMG) | `WB_InventoryScreen`, `WBP_PauseMenu` |
|
||||
| `AC_` | ActorComponent | `AC_Stats`, `AC_ClimbingComponent` |
|
||||
| `IA_` | Input Action (Enhanced Input) | `IA_InteractAGIS`, `IA_QuickSelectAGIS` |
|
||||
| `IMC_` | Input Mapping Context | `IMC_AGIS_Character` |
|
||||
| `E_` / `EM_` | Enum | `E_MovementMode`, `EM_Road_Type` |
|
||||
| `S_` / `ST_` | Struct | `S_TraversalCheckInputs`, `ST_Weather_Zone_forecasts` |
|
||||
| `M_` | Material | `M_Road`, `M_Campfire` |
|
||||
| `MI_` | Material Instance | `MI_Black`, `MI_Bottle` |
|
||||
| `SM_` | Static Mesh | `SM_Campfire`, `SM_RifleAdvanced` |
|
||||
| `SKM_` | Skeletal Mesh | `SKM_BodyArmor` |
|
||||
| `PA_` | Physics Asset | `PA_BodyArmor` |
|
||||
| `T_` | Texture | `T_Helmet` |
|
||||
| `RT_` | Render Target | `RT_InspectRenderer` |
|
||||
| `DT_` | Data Table | `DT_Items` |
|
||||
| `DD_` | Data Definition (DataAsset) | `DD_Item` |
|
||||
| `ML_` | Macro Library (Blueprint) | `ML_InventoryMacros` |
|
||||
| `SG_` | SaveGame | `SG_AGIS_UID`, `SG_AGIS_World` |
|
||||
| `GM_` / `PC_` | GameMode / PlayerController | `GM_Sandbox`, `PC_Sandbox` |
|
||||
| `CR_` | Control Rig | `CR_ClimbingGraphV2` |
|
||||
| `ABP_` | Animation Blueprint | `ABP_GenericRetarget` |
|
||||
| `AM_` | Anim Modifier / Anim Montage | `AM_ReloadHip` |
|
||||
| `NS_` | Niagara System | `NS_Tornado` |
|
||||
| `BPI_` | Blueprint Interface | `BPI_Interactable` |
|
||||
|
||||
Le suffixe `AGIS` sur beaucoup d'assets (`IA_InteractAGIS`, `WB_...AGIS`, fonctions "Target is Inventory Player") signale qu'ils appartiennent au **socle marketplace AGIS**, par opposition aux ajouts spécifiques au projet.
|
||||
|
||||
### 1.5 Conventions importantes à respecter
|
||||
|
||||
- **Ne jamais renommer/déplacer** les assets du socle AGIS (`Content/Core/Coreinventory/`, une bonne partie de `Content/Systems/Inventory/`, `Content/UI/Inventory_UI/Widgets/WB_Container|WB_EquipSlot|WB_InventorySlot|WB_Item`) sans nécessité — de nombreuses références internes au plugin marketplace en dépendent.
|
||||
- **Nouveau système de gameplay** → créer un dossier dédié sous `Content/Systems/<NomDuSysteme>/`, à l'image de `Systems/Stats/`, `Systems/Scent/`, `Systems/Movable_Object/`.
|
||||
- **Nouvel objet d'inventaire (item)** → suivre le patron existant dans `Content/Items/` : un Blueprint `BP_Item_<Nom>` (héritant de `_BP_ItemBase` ou d'une base spécialisée dans `Items/BaseBlueprints/`), ses assets (mesh/matériau/texture) dans un sous-dossier `Content/Items/<Nom>/` ou `Content/Items/Resources/<Nom>/`, et une entrée dans `DT_Items` / les DataAssets sous `Content/Data/Inventory_Data/DataAssets/`.
|
||||
- **Nouvel Input Action lié à l'inventaire** → `Content/Systems/Inventory/Other/Inputs/Actions/`, mappé dans `IMC_AGIS_Character` ou `IMC_AGIS_InventoryTab`. **Input Action de déplacement/caméra générique** → `Content/Core/PlayerController/Input/`, mappé dans `IMC_Sandbox`.
|
||||
- **Nouveau widget d'inventaire** → `Content/UI/Inventory_UI/Widgets/`. **Nouveau widget hors inventaire** (HUD, menus) → `Content/UI/Widgets/`.
|
||||
- Le clavier cible est **AZERTY** ; privilégier des touches identiques physiquement sur QWERTY/AZERTY pour les nouveaux raccourcis (ex. `V`, `B`).
|
||||
- Réplication réseau : toute action qui modifie l'état du jeu côté inventaire/stats doit suivre le patron `Request X SERVER` (Custom Event `...SERVER`, `Replicated From Client, Executes On Server`) déjà présent dans `Inventory_Player`.
|
||||
|
||||
---
|
||||
|
||||
## 2. Vue d'ensemble de l'arborescence racine
|
||||
|
||||
```text
|
||||
ProjectF/
|
||||
├── .gitattributes → Règles Git (LFS, line-endings)
|
||||
├── .gitignore → Exclut Binaries/, Intermediate/, Saved/, DerivedDataCache/, .vscode/…
|
||||
├── .mcp.json → Déclare le serveur MCP "unreal-mcp" (http://127.0.0.1:8000/mcp) utilisé par les agents IA
|
||||
├── ProjectF.uproject → Fichier projet UE5.8 : liste des plugins activés (voir §1.2/§8)
|
||||
├── README.md → Description minimale du projet
|
||||
├── Architecture_Projet.md → CE DOCUMENT
|
||||
│
|
||||
├── .claude/ → Skills et configuration Claude Code pour ce projet
|
||||
│ └── skills/
|
||||
│ └── maintain-architecture-doc/SKILL.md → Skill de maintenance de ce document (voir §10)
|
||||
│
|
||||
├── .codex/, .cursor/, .gemini/, .vscode/ → Configuration d'IDE / d'agents IA tiers (mcp.json, config.toml…)
|
||||
│
|
||||
├── Config/ → Configuration moteur & jeu (voir détail §7)
|
||||
├── Content/ → Tous les assets du jeu (voir détail §3 à §6)
|
||||
│
|
||||
├── Binaries/, Intermediate/, Saved/, DerivedDataCache/ → Générés par l'éditeur, exclus de Git, jamais à éditer/documenter
|
||||
```
|
||||
|
||||
### 2.1 ⚠️ Fichiers isolés directement à la racine de `Content/`
|
||||
|
||||
Quelques fichiers importants vivent directement sous `Content/`, hors de toute organisation par dossier — à connaître avant de chercher "où est le personnage" ou "où est le GameInstance" :
|
||||
|
||||
```text
|
||||
Content/
|
||||
├── SandboxCharacter_CMC.uasset → ⭐ Le Blueprint du PERSONNAGE JOUEUR lui-même (Character/Pawn). Référencé par GM_Dev, GM_Sandbox, PC_Sandbox, Gamemode_AGIS, WB_InventoryScreen, WBP_PauseMenu, BP_Moveble_Object, BP_Simply_Door, AC_PreCMCTick, AC_ClimbingComponent et son propre Anim BP (Systems/Blueprints/SandboxCharacter_CMC_ABP). C'est le point d'entrée central de tout le gameplay.
|
||||
├── BP_GameInstance.uasset → GameInstance réellement utilisé par le projet (à ne pas confondre avec `Core/Coreinventory/GameInstance_AGIS`, la base du plugin — vérifier lequel des deux est configuré comme GameInstance par défaut avant de supposer que c'est l'un ou l'autre).
|
||||
└── DT_DemoTags.uasset (+ .T3D) → DataTable de tags, probablement un reste de test/démo. Aucune référence trouvée dans le projet au 2026-09-04 — candidate à la suppression, mais volontairement laissée en l'état (non confirmée inutile).
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 3. `Content/Core/` — Socle inventaire (AGIS) + Player Controller + Tick
|
||||
|
||||
Le cœur technique de l'inventaire et des entrées génériques du joueur.
|
||||
|
||||
```text
|
||||
Content/Core/
|
||||
├── Coreinventory/ → Cœur du plugin AGIS (composants, données, sauvegarde)
|
||||
│ ├── Inventory__Main.uasset → ActorComponent BASE : logique générique de containers/slots, réplication réseau. Racine de la hiérarchie d'inventaire.
|
||||
│ ├── Inventory_Equipper.uasset → hérite de Inventory__Main : ajoute la logique d'équipement (armes/objets tenus en main)
|
||||
│ ├── Inventory_Player.uasset → hérite de Inventory_Equipper : composant d'inventaire du JOUEUR. Contient toute la logique spécifique projet ajoutée cette session (SelectQuickSlot, ToggleQuickEquip, GetQuickSlotItemInfo, graphe INPUTS avec tous les bindings Enhanced Input du joueur)
|
||||
│ ├── Inventory_Storage.uasset → Inventaire des containers de stockage (coffres, trunk, etc.)
|
||||
│ ├── Inventory_Vendor.uasset → Inventaire des PNJ vendeurs
|
||||
│ ├── Inventory_Crafting.uasset → Inventaire des stations de craft (campfire, smelter, générateur)
|
||||
│ ├── BP_AttachmentHandler.uasset → ActorComponent gérant les attachements sur les armes (silencieux, lampe, chargeur…)
|
||||
│ ├── CombatComponent.uasset → ActorComponent : logique de combat (tir, dégâts) liée aux armes AGIS
|
||||
│ ├── BP_SM_DroppedMesh.uasset → Acteur représentant un objet lâché au sol (mesh statique + interaction de ramassage)
|
||||
│ ├── ItemMesh_STATIC.uasset / ItemMesh_Skeletal.uasset → Acteurs générant le rendu 3D d'un item tenu/lâché (mesh statique ou squelettal)
|
||||
│ ├── DD_Item.uasset → DataAsset décrivant un item (référencé par ItemDefaults)
|
||||
│ ├── FL_AGIS.uasset → Function Library : fonctions statiques utilitaires du plugin AGIS
|
||||
│ ├── ML_AGISDefaults.uasset → Macro Library : macros par défaut du plugin
|
||||
│ ├── ML_AGIS_UMG.uasset → Macro Library : macros dédiées à l'UI (UMG)
|
||||
│ ├── ML_InventoryMacros.uasset → Macro Library : macros génériques d'inventaire
|
||||
│ ├── GameInstance_AGIS.uasset → GameInstance de base du plugin (état persistant entre les maps)
|
||||
│ ├── Gamemode_AGIS.uasset → GameMode de base du plugin (indépendant de GM_Sandbox, voir §4)
|
||||
│ ├── PlayerController_AGIS.uasset → PlayerController de base du plugin
|
||||
│ └── SG_AGIS_UID.uasset / SG_AGIS_World.uasset → SaveGame : compteur d'UID uniques / état persistant du monde (sauvegarde)
|
||||
│
|
||||
├── PlayerController/ → Input générique du joueur (mouvement, caméra), indépendant de l'inventaire
|
||||
│ ├── IA_InitiateClimb / IA_LeapFromClimb / IA_MovingClimb.uasset → Input Actions liées à l'escalade
|
||||
│ └── Input/
|
||||
│ ├── IMC_Sandbox.uasset → Input Mapping Context PRINCIPAL du personnage (mouvement, caméra, saut…)
|
||||
│ └── IA_Move, IA_Look, IA_Jump, IA_Sprint, IA_Run, IA_Walk, IA_Crouch, IA_Prone, IA_Strafe,
|
||||
│ IA_Aim, IA_Interact, IA_ESC, IA_NextPawn, IA_Traverse, IA_TeleportToTarget,
|
||||
│ IA_SwimmingDeep, IA_TwinStick_AimDirection, IA_Move_WorldSpace, IA_Look_Gamepad,
|
||||
│ IA_NextVisualOverride, IA_rool.uasset → Input Actions individuelles mappées dans IMC_Sandbox
|
||||
│
|
||||
└── Tick/ → Système de gestion centralisée du Tick (perf)
|
||||
├── BPI_TickManager.uasset → Interface implémentée par les acteurs qui veulent être "tickés" par le manager
|
||||
├── BP_TickManager.uasset → Acteur central qui distribue les ticks (probablement à fréquence configurable)
|
||||
└── E_TickFrequency.uasset → Enum des fréquences de tick disponibles
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. `Content/Systems/` — Systèmes de gameplay
|
||||
|
||||
### 4.1 `Systems/Inventory/` — Extension du socle AGIS pour ce projet
|
||||
|
||||
```text
|
||||
Content/Systems/Inventory/
|
||||
├── BP_Spawner.uasset → Acteur de spawn (probablement spawn d'items/loot en début de partie)
|
||||
├── DT_Items.uasset → DataTable listant tous les items du jeu (clé pour créer/reconnaître un item)
|
||||
│
|
||||
├── Interactables/ → Tout ce que le joueur peut "interagir" avec (touche IA_InteractAGIS)
|
||||
│ ├── BP_EnemyPuppet.uasset → PNJ/mannequin pillable
|
||||
│ ├── BP_Vendor.uasset → PNJ vendeur (utilise Inventory_Vendor)
|
||||
│ ├── CraftingInteractables/
|
||||
│ │ ├── Campfire/BP_Campfire.uasset → Station de cuisson/craft (feu de camp) + ses assets (mesh, matériaux)
|
||||
│ │ └── Smelter/BP_Smelter.uasset → Station de fonte de minerai + ses assets
|
||||
│ ├── FuelGenerator/BP_Generator.uasset → Générateur électrique (consomme du carburant)
|
||||
│ ├── KeycardReader/BP_KeycardReader.uasset → Lecteur de carte magnétique (déverrouillage)
|
||||
│ ├── Other/BP_SimpleDoor.uasset → Porte interactable simple
|
||||
│ └── Storages/
|
||||
│ ├── BP_StorageBox.uasset, BP_Trunk.uasset, BP_SphereStorage.uasset, _BP_StorageBase.uasset → Coffres/contenants de stockage (héritent de _BP_StorageBase)
|
||||
│ └── Deadbody/BP_Deadman.uasset → Cadavre pillable
|
||||
│
|
||||
├── Interfaces/ → Interfaces Blueprint (contrats partagés)
|
||||
│ ├── BPI_Interactable.uasset → Contrat pour tout objet interactible (implémenté par tous les Interactables ci-dessus)
|
||||
│ ├── BPI_SlotWidgets.uasset → Contrat pour les widgets de slot d'inventaire
|
||||
│ ├── BPI_HoldableItem.uasset → Contrat pour un item tenable en main
|
||||
│ ├── BPI_WeaponAGIS.uasset → Contrat pour les armes
|
||||
│ ├── BPI_DamageFeedback.uasset → Contrat de retour visuel/sonore lors de dégâts
|
||||
│ └── BPI_GameInstance_AGIS.uasset → Contrat exposé par le GameInstance côté AGIS
|
||||
│
|
||||
├── Other/ → Assets d'appoint de l'inventaire
|
||||
│ ├── Animations/ → Animations liées aux armes/mains nues (Jog, Rifle, TurnInPlace, WALK) — clips Motion Matching (MM_*) et montages (AM_*)
|
||||
│ ├── Fonts/ → Polices utilisées par l'UI d'inventaire
|
||||
│ ├── Inputs/
|
||||
│ │ ├── Actions/ → **Toutes** les Input Actions liées à l'inventaire (IA_*AGIS), y compris IA_QuickSelectAGIS et IA_QuickEquipAGIS (sélection rapide, ajoutées pour ce projet)
|
||||
│ │ ├── IMC_AGIS_Character.uasset → Mapping Context actif en jeu (personnage) : touches 1/2/3/4, F, V, B, etc.
|
||||
│ │ └── IMC_AGIS_InventoryTab.uasset → Mapping Context actif quand l'inventaire plein écran est ouvert
|
||||
│ ├── InspectCapture/ → Rendu d'inspection d'objet (RT_InspectRenderer + BP_InspectRenderer + M_Inspect)
|
||||
│ └── Materials/ → Matériaux génériques réutilisés par les items (MI_Black, MI_Red, M_Metal, M_Outline…)
|
||||
│
|
||||
└── Utilities/ → Outils d'éditeur (Editor Utility Widgets) pour la création de containers/inventaires
|
||||
├── EUW_ContainersCreator.uasset, EUW_WidgetToInventoryData.uasset
|
||||
└── Others/WB_ContainerSpecsUtility.uasset, WB_CreatorContainerUtility.uasset
|
||||
```
|
||||
|
||||
### 4.2 `Systems/Blueprints/` — Framework de personnage / locomotion ("Sandbox Character")
|
||||
|
||||
Contenu très largement issu du sample Epic **Motion Matching** (plugins `Mover`, `MotionTrajectory`, `Chooser`, `AnimationLocomotionLibrary`). À traiter comme un framework tiers : préférer l'étendre plutôt que le réécrire.
|
||||
|
||||
```text
|
||||
Content/Systems/Blueprints/
|
||||
├── BPI_SandboxCharacter_Pawn.uasset → Interface du Pawn joueur (point d'entrée du framework de locomotion)
|
||||
├── BPI_SandboxCharacter_ABP.uasset → Interface de l'Anim Blueprint du personnage
|
||||
├── AC_TraversalLogic.uasset → ActorComponent : logique de traversal (vault/mantle/climb contextuel)
|
||||
├── AC_PreCMCTick.uasset → ActorComponent : logique exécutée avant le tick du mouvement (Mover/CMC)
|
||||
├── AC_VisualOverrideManager.uasset → ActorComponent : gestion des overrides visuels du personnage
|
||||
├── GM_Sandbox.uasset / PC_Sandbox.uasset → GameMode / PlayerController du framework de locomotion (indépendants de Gamemode_AGIS/PlayerController_AGIS, voir §3)
|
||||
│
|
||||
├── Cameras/ → Système de caméra (Camera Rigs modulaires)
|
||||
│ ├── CameraAsset_SandboxCharacter, CameraDirector_SandboxCharacter, CHT_CameraRig
|
||||
│ ├── E_CameraMode.uasset, E_CameraStyle.uasset
|
||||
│ └── Rigs/CameraRig_* (Close/Medium/Far × Aim/Freecam/Strafe, CrouchOffset, CollisionOffset, TwinStick…)
|
||||
│
|
||||
├── MovementModes/ → Modes de mouvement personnalisés (plugin Mover)
|
||||
│ ├── BP_MovementMode_Walking / _Falling / _Slide
|
||||
│ ├── BP_MovementTransition_ToSlide / _FromSlide
|
||||
│ └── BP_ClimbingMode.uasset
|
||||
│
|
||||
├── ControlRigs/CR_Biped_FootPlacement.uasset → Control Rig : placement des pieds (foot IK)
|
||||
├── RetargetedCharacters/ABP_GenericRetarget.uasset → Anim BP générique pour le retargeting
|
||||
│
|
||||
├── AnimModifiers/ → Anim Modifiers (post-traitement de clips d'animation à l'import)
|
||||
├── AnimNotifies/ → Anim Notifies personnalisées (BP_AnimNotify_FoleyEvent*, BP_NotifyState_EarlyTransition/MontageBlendOut) + enums associés
|
||||
│
|
||||
├── Data/ → Structs/Enums/Curves partagés par tout le framework de locomotion
|
||||
│ ├── E_Gait, E_Stance, E_MovementMode, E_MovementState, E_MovementDirection(Bias), E_RotationMode,
|
||||
│ │ E_AnalogStickBehavior, E_ExperimentalStateMachineState, E_TraversalActionType
|
||||
│ ├── S_CharacterPropertiesForAnimation / _ForCamera / _ForTraversal, S_BlendStackInputs,
|
||||
│ │ S_MoverCustomInputs, S_PlayerInputState, S_TraversalCheckInputs/Result,
|
||||
│ │ S_TraversalChooserInputs/Outputs, S_ChooserOutputs, S_MovementDirectionThresholds,
|
||||
│ │ S_RotationOffsetCurveChooser_Inputs, S_DebugGraphLineProperties
|
||||
│ ├── Curve_RotationOffset_* , Curve_StrafeSpeedMap, CHT_RotationOffsetCurve → Curve Tables pilotant les offsets d'animation
|
||||
│ └── BFL_HelpfulFunctions.uasset, BPI_InteractionTransform.uasset
|
||||
│
|
||||
├── SmartObjects/ → Intégration du plugin SmartObject (points d'ancrage d'animation contextuelle)
|
||||
│ ├── CHPA_SmartObject, AC_SmartObjectAnimation
|
||||
│ └── SmartObjectAnimationPayload, SmartObjectSelectionInputs/Outputs
|
||||
│
|
||||
└── SandboxCharacter_CMC_ABP.uasset → Anim Blueprint principal du personnage joueur (piloté par `/Game/SandboxCharacter_CMC`). Anciennement égaré dans un dossier `d/` mal nommé — déplacé ici (nettoyage du 2026-09-04).
|
||||
```
|
||||
|
||||
### 4.3 Autres systèmes de gameplay (ajouts spécifiques au projet)
|
||||
|
||||
```text
|
||||
Content/Systems/
|
||||
├── Stats/
|
||||
│ └── AC_Stats.uasset → ActorComponent ACTIF : gère la vie du personnage (Health), la mort (bIsDead, dispatcher OnDeath), Heal, Revive (voir §1.3). Ajouté cette session pour le système de mort/respawn.
|
||||
│
|
||||
├── Door/
|
||||
│ ├── Garage_Door/BP_Garage_door.uasset → Porte de garage interactable
|
||||
│ └── Simply_Door/BP_Simply_Door.uasset → Porte simple interactable
|
||||
│
|
||||
├── Movement/
|
||||
│ ├── Climbing/AC_ClimbingComponent.uasset, CR_ClimbingGraphV2.uasset (Control Rig), CR_Mannequin_BasicFootIK.uasset, ClimbingMaterial.uasset
|
||||
│ └── Cover/AC_Cover.uasset → ActorComponent : système de couverture (cover system)
|
||||
│
|
||||
├── Scent/BP_ScentPoint.uasset → Point émetteur d'odeur (probablement pour une IA de traque par l'odorat)
|
||||
├── Movable_Object/BP_Moveble_Object.uasset → Objet physique déplaçable par le joueur
|
||||
├── Interact_Interface.uasset → Interface d'interaction générique (racine de Systems/, à distinguer de BPI_Interactable dans Inventory/Interfaces/)
|
||||
│
|
||||
└── Weather/
|
||||
├── Tornado/BP_Tornado.uasset, NS_Tornado.uasset → Tornade dynamique (acteur + système Niagara), spécifique au projet
|
||||
└── UltraDynamicSky/ → 🧩 **Asset marketplace tiers complet** (~789 fichiers : Blueprints, matériaux, sons, textures de ciel/météo dynamique). Ne pas modifier directement ; utiliser ses points d'extension documentés par le plugin (Weather_Presets, Climate_Presets, Sky_Modifiers). Structure interne : Blueprints/ (Enum, Functions, Occlusion, Sky_Modifiers, Sound, System, Tools, Utilities, Weather_Effects, Widgets), Materials/, Meshes/, Particles/, Sound/, Textures/, Maps/ (map de démo du plugin).
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. `Content/Data/` — Structures de données globales
|
||||
|
||||
```text
|
||||
Content/Data/
|
||||
├── DataTable/DT_Season.uasset → DataTable des saisons (météo)
|
||||
│
|
||||
├── Enums/
|
||||
│ ├── E_CoverD.uasset, E_WeaponType.uasset
|
||||
│ ├── Enums/E_BodyPart.uasset
|
||||
│ └── Movement_enum/Weapon_Equip.uasset
|
||||
│ (⚠️ à ne pas confondre avec Data/Inventory_Data/Enumerations/ ci-dessous — deux emplacements d'enums coexistent)
|
||||
│
|
||||
├── Structure/Weather/ → Structs météo (ST_Season, ST_WeatherZoneState, ST_Weather_Zone_CurentWeather/forecasts/_Data, ST_Zone_Influance)
|
||||
│
|
||||
└── Inventory_Data/ → Données du système d'inventaire AGIS
|
||||
├── DataAssets/
|
||||
│ ├── AttachmentData/ → AttachmentData (base) + AttachmentData_AdvancedRifle, AttachmentData_Flashlight : configuration des attachements d'armes
|
||||
│ ├── ContainerGroupData/ → Un DataAsset par "groupe de containers" (Backpack BIG/SMALL, Box/Chest Storage, Vest_1/2, ExampleStorage…) : définit la mise en page des slots d'un contenant
|
||||
│ └── InventoryData/ → Un DataAsset par inventaire prédéfini (PlayerInventoryPart1/2, CardReader_Inventory, Generator_Inventory, Vehicle_Inventory)
|
||||
├── Enumerations/ → Enums spécifiques AGIS : EAnimOverlayState, EBallDirections, EFourDirections/ETwoDirections, EInteractionType, EItemActions, ENestingRules, EPrintType, EReloadType, EServerVerificationType, ESlotAppearance, EVendorBuyOption
|
||||
└── Structures/ → Structs spécifiques AGIS
|
||||
├── ItemDefaults.uasset → Struct CENTRALE décrivant un item (Name, etc.) — lue par WB_Item et par la logique de sélection rapide (Inventory_Player)
|
||||
├── ItemInfo, SlotInfo, SlotAddress, SlotAppearance, SubItemInfo, RandomSubItem
|
||||
├── ContainerInfo, ContainerAppearance
|
||||
├── AttachmentInfo, EquipSlot_KeySettings/_OwnContainersSettings/_TextureSettings/_TitleSettings
|
||||
├── ClientWidgetData, CombinedTexturesInfo, TextureInfo
|
||||
├── CraftingSlotRowInfo, DragSounds, DebugPrint, FindResult, InspectCameraInfo, InteractCosmetics, ItemActorInfo, MenuActions
|
||||
└── SaveStructures/SaveData_Player, SaveData_Storages, Savedata_ItemActor → Structures de sauvegarde (non encore branchées à un vrai système de save, voir §1.3 du système de mort)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. `Content/UI/` — Interfaces utilisateur
|
||||
|
||||
```text
|
||||
Content/UI/
|
||||
├── Inventory_UI/ → TOUTE l'UI de l'inventaire (socle AGIS + ajouts projet)
|
||||
│ ├── MaterialResources/ → Matériaux/Material Instances de fond des slots (MI_Background_*, M_RuntimeItemMaterial…)
|
||||
│ └── Widgets/
|
||||
│ ├── WB_Container.uasset → Widget représentant un container (grille de slots) — contient SlotWidgets[]
|
||||
│ ├── WB_EquipSlot.uasset → Widget d'un slot d'équipement (arme/speed) — contient Container
|
||||
│ ├── WB_InventorySlot.uasset → Widget d'un slot individuel dans une grille — expose "ItemWidget On Slot"
|
||||
│ ├── WB_Item.uasset → Widget représentant un item posé dans un slot — expose "Item Defaults" (struct ItemDefaults)
|
||||
│ │
|
||||
│ ├── InventoryMenu/
|
||||
│ │ ├── WB_InventoryScreen.uasset → Widget racine de l'inventaire plein écran (contient InventoryPart1/InventoryPart2)
|
||||
│ │ ├── WB_InventoryPart1.uasset → Contient les 4 slots d'équipement (EquipSlotWEAPON, EquipSlotWEAPON2, EquipSlotSpeed1, EquipSlotSpeed2) + autres slots d'équipement (casque, gilet, gants, sac à dos…)
|
||||
│ │ └── WB_InventoryPart2.uasset → Grille(s) d'inventaire principale(s)
|
||||
│ │
|
||||
│ ├── ItemActionsMenu/WB_ItemMenu.uasset, WB_GeneralButton.uasset → Menu contextuel d'actions sur un item
|
||||
│ │
|
||||
│ ├── LootWidgets/ → Fenêtres de pillage, une par type de source (Human, Storage, Vendor, Vehicle, Generator, KeycardReader) héritant de _WB_LootWidgetBASE ; LootingCrafting/ pour les stations de craft
|
||||
│ │
|
||||
│ ├── MovableWindows/ → Système de fenêtres déplaçables (_WB_Window_Base) : ItemInspect/ (inspection 3D d'un item), ItemInventory/ (fenêtre d'inventaire flottante), WB_TitleBar_Window (barre de titre commune)
|
||||
│ │
|
||||
│ └── Other/
|
||||
│ ├── WB_QuickSelect.uasset → 🆕 Roue de sélection rapide (4 slots : Arme1/Arme2/Speed1/Speed2 + "Aucun"). Résout seule son Inventory_Player propriétaire au Construct (GetOwningPlayerPawn → GetComponentByClass). Ouverte/fermée depuis Inventory_Player (touche V maintenue).
|
||||
│ ├── WB_YouDied.uasset → Écran "Vous êtes mort" (système de mort/respawn)
|
||||
│ ├── WB_ActionScreen, WB_InteractScreen, WB_InteractBall, WB_PickupDisplay → Feedback d'interaction/pickup au sol
|
||||
│ ├── WB_CombatHUD, WB_DisplayHUD, WB_WeaponAmmoInfo → HUD de combat/munitions
|
||||
│ ├── WB_InventoryBackground, WB_ItemInfo, WB_SlotTitle → Éléments visuels d'appoint
|
||||
│ └── WidgetTextures/ → Icônes des slots d'équipement (T_EquipSlot_*) et textures d'UI diverses
|
||||
│
|
||||
├── TextureUI/M_CharacterUI.uasset, RT_CharacterView.uasset → Rendu de la vue personnage dans l'UI (ex. écran d'inspection du personnage)
|
||||
│
|
||||
└── Widgets/ → UI HORS inventaire
|
||||
├── HUD/WB_HUD.uasset, WB_New_HUD.uasset, WB_New_InterfacePlayer.uasset
|
||||
├── PauseMenu/WBP_PauseMenu.uasset, WBP_Options.uasset
|
||||
└── interaction/WB_Interact.uasset
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. `Content/Items/`, `Content/PCG/`, `Content/Maps/`, `Content/VFX/`, `Content/Prop/`
|
||||
|
||||
```text
|
||||
Content/Items/ → Objets ramassables/équipables du jeu
|
||||
├── BaseBlueprints/
|
||||
│ ├── _BP_ItemBase.uasset → Blueprint BASE de tout item (racine de hiérarchie)
|
||||
│ ├── BP_Item_HoldableBase.uasset → Base des items tenables en main
|
||||
│ ├── BP_Item_Armor_Base.uasset → Base des items d'armure/équipement porté
|
||||
│ └── BP_Item_Skeletal_Base.uasset → Base des items avec mesh squelettal
|
||||
│
|
||||
├── BP_Item_AdvancedRifle / _Backpack_Camper / _Backpack_Sport / _BodyArmor / _Flashlight /
|
||||
│ _Gloves / _Helmet / _KevlarVest / _LightVest / _Siren.uasset → Blueprints d'items "portés" (racine d'Items/)
|
||||
├── Attachments/BP_Item_MagazineBase, BP_Item_RifleFlashlight, BP_Item_Suppressor.uasset → Attachements d'armes
|
||||
├── ItemObjects/BPI_MergeableItemObject, ItemObject__BASE, ItemObject_ConsumableBASE, ItemObject_Magazine.uasset → Objets "monde" associés aux items (empilables, consommables, munitions)
|
||||
│
|
||||
├── Ammo/, Weapon/ (Base_Bow, Base_knife), Tool/ (saucepan), Water/ (water_bottle),
|
||||
│ Food/ (Red_Apple, meat, cooked_Meat, Burnt_Meat), Resource/ (Stick, Stone)
|
||||
│ → Chaque sous-dossier contient les assets (mesh/matériau/texture/Thumbnail) d'un item ; les Blueprints correspondants sont soit à la racine d'Items/, soit dans Resources/
|
||||
│
|
||||
├── Resources/ → Assets 3D (mesh/matériau/texture) groupés par équipement porté, + cas particuliers
|
||||
│ ├── Backpack_Camper/, Backpack_Sport/, BodyArmor/, Gloves/, Helmet/, KevlarVest/, LightVest/, Rifle/
|
||||
│ ├── _Others/ → Assets des petits objets (Keycard, Log, Meat, AmmoBox, Battery, Flashlight, FuelCanister, GoldIngot/GoldOre, Headphone, MoneyBag, WaterBottle)
|
||||
│ └── ABP_SkeletalEquippables.uasset → Anim Blueprint partagé par les items squelettaux équipés
|
||||
│
|
||||
└── ItemTextures/ → Textures d'icônes/inventaire communes à tous les items (T_*)
|
||||
|
||||
Content/PCG/ → Génération procédurale de contenu (plugin PCG)
|
||||
├── Road/
|
||||
│ ├── PCG_Road.uasset → Graphe PCG générant la route procédurale (matériaux vieillis/mousse/humidité, potholes via GeometryScript)
|
||||
│ ├── BP_AbandonedRoad.uasset → Acteur portant le graphe PCG
|
||||
│ ├── M_Road.uasset, ST_Road_data.uasset, EM_Road_Type.uasset → Matériau, struct de données et enum de types de route
|
||||
├── Vegetation/TreeTest.uasset → Graphe PCG de placement de végétation (arbres, générés via PVE pour la route)
|
||||
└── test/NewPCGGraph1.uasset → Graphe de test/brouillon
|
||||
|
||||
Content/Maps/DevMap/
|
||||
├── MapDev1.umap → 🗺️ Map de développement PRINCIPALE (GameDefaultMap / EditorStartupMap, voir Config/DefaultEngine.ini)
|
||||
├── GM_Dev.uasset → GameMode utilisé sur MapDev1 (hérite directement de GameModeBase, indépendant de GM_Sandbox/Gamemode_AGIS)
|
||||
├── pcg_Test_Dev.umap → Map de test PCG
|
||||
└── PCG_Test_Dev_HLODLayer_*, Untitled_HLOD0_Instancing.uasset → Assets HLOD générés pour les maps de test
|
||||
|
||||
Content/VFX/
|
||||
├── Firetrail/BP_FireTrail.uasset, Effects/P_BulletTrail.uasset, Materials/M_BulletTrail.uasset → Traînée de balle
|
||||
└── MI_MuzzleFlash, M_MuzzleFlash, MuzzleFlash, P_MuzzleFlash → Effet de tir (bouche de canon)
|
||||
├── M_Blood.uasset, T_Blood.uasset → Effet de sang
|
||||
└── crosshair.uasset, hitmarker.uasset → Éléments de HUD de tir
|
||||
|
||||
Content/Prop/Wooden_Door/ → Prop de porte en bois (mesh + matériaux), utilisé par les BP de porte interactable
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. Assets tiers / bibliothèques (peu ou pas de logique de gameplay)
|
||||
|
||||
Ces dossiers contiennent des assets achetés/importés (Marketplace, Fab/Quixel Megascans, Megaplant, packs d'animation mocap). Ils sont volumineux (des centaines de fichiers) et **ne sont volontairement pas détaillés fichier par fichier** ici — voir §10 pour la règle sur quand les documenter.
|
||||
|
||||
```text
|
||||
Content/Animations/ → Clips de mocap tiers : DeerAndDoe/, Fox/, Wolf/, humain/ (Armed_mov, Avoid, Carrying, Cover,
|
||||
Effect_Animation, INteraction, Prone, Push, SwimmingAnimation…)
|
||||
Content/Characters/ → Meshes/matériaux/textures des personnages et animaux (Animal/DeerStagAndDoe|Fox|Wolf,
|
||||
UEFN_Mannequin/ avec ses données de Motion Matching : AimOffset, Crouch, Idle, Jump,
|
||||
MotionMatchingData/ [Channels, Databases, Normalization_Sets, Schemas], Poses, Run, Slide,
|
||||
Sprint, Traversal, Walk, Rigs, Materials, Meshes, Textures)
|
||||
Content/Fab/ → Assets Fab/Quixel Megascans : MaterialFunctions/, MaterialParameterCollection/, Materials/
|
||||
(Standard/VT), Megascans/Plants/ (Common_Hemp_Nettle, Wild_Grass ×2), Megascans/Surfaces/
|
||||
(Damaged_Asphalt, Dirt_Ground, Forest_Floor), Textures/ (Standard/VT)
|
||||
Content/Megaplant_Library/ → Végétation Megaplant : Plant_Bilberry/, Tree_European_Aspen/, Tree_Hornbeam/
|
||||
(chacun avec Instances/, Materials/, Textures/)
|
||||
Content/Thumbnails/ → Miniatures générées pour la Content Browser
|
||||
Content/Collections/ → Collections d'assets (vide actuellement)
|
||||
Content/Developers/catry/ → Dossier de développeur personnel (playground, Collections/) — non partagé/gameplay
|
||||
Content/Misc/ → SandboxAnimCurveCompressionSettings.uasset (réglages de compression d'anim)
|
||||
Content/__ExternalActors__/ → ⚙️ Généré automatiquement par World Partition (données par-acteur des maps, ex. LocomotionAnimPack).
|
||||
Content/__ExternalObjects__/ → ⚙️ Généré automatiquement par World Partition (objets externes liés aux maps).
|
||||
→ Ces deux derniers dossiers ne doivent JAMAIS être édités ou documentés à la main :
|
||||
leur contenu suit automatiquement les maps et les acteurs qu'elles contiennent.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. Notes pour les IA : pièges connus de l'outillage
|
||||
|
||||
Ce projet est modifié via le plugin **VibeUE** (service MCP `unreal-mcp`, voir `.mcp.json`), qui expose des services Python (`unreal.BlueprintService`, `unreal.WidgetService`, `unreal.InputService`, `unreal.EnumStructService`, etc.) pour piloter l'éditeur Unreal sans l'ouvrir manuellement. Quelques pièges rencontrés et leurs solutions :
|
||||
|
||||
- **`build_graph`** attend un champ **`"ref"`** pour identifier chaque nœud dans la liste `nodes` (pas `"id"`). Un mauvais nom de champ échoue silencieusement (retourne `None` sans erreur explicite).
|
||||
- Les **variables locales à une fonction** (paramètres, locals créés via `add_object_variable` avec `graph=...`) ne sont pas fiables avec `build_graph`'s `variable_get`/`variable_set` : préférer des **variables membres** du Blueprint.
|
||||
- Un `K2Node_VariableSet`/`Get` créé via un spawner_key générique (`discover_nodes` + `create_node_by_key`) peut se résoudre sur la **mauvaise classe** si plusieurs Blueprints chargés ont une variable de même nom affiché (ex. "Owner Inventory" existe à la fois sur `WB_Container` et sur un widget créé cette session) — toujours vérifier les pins du nœud créé (`get_node_pins`) avant de câbler, ou utiliser `build_graph` avec `type: "variable_set"` + `params.variable` en contexte "self" qui est fiable.
|
||||
- Appeler une fonction Blueprint **préexistante** (créée dans une session antérieure/par le plugin marketplace) sur un **autre** Blueprint peut échouer silencieusement selon la méthode utilisée. Privilégier l'accès direct aux propriétés (`member_get`, fiable) plutôt que l'appel de fonction cross-Blueprint quand c'est possible ; sinon tester `add_function_call_on_variable` et vérifier le résultat via `get_node_pins`/`get_nodes_in_graph`.
|
||||
- Écrire une valeur littérale sur un pin de type `Text`, `Object` ou `Class` via `set_node_pin_value` échoue souvent **silencieusement à l'affichage** (`get_node_pins` renvoie toujours `default_value: ""`) même quand l'assignation a réellement fonctionné — vérifier via une **compilation** (erreurs de compilation manquantes = probablement OK) plutôt que via une relecture du pin.
|
||||
- **Toujours compiler ET sauvegarder** un Blueprint après modification (`BlueprintEditorLibrary.compile_blueprint` + `EditorAssetLibrary.save_loaded_asset`), puis **tester en PIE** et lire les logs (`EditorToolset.LogsToolset.GetLogEntries`, filtrer sur `"Blueprint Runtime Error"`) pour détecter les erreurs à l'exécution qu'une compilation réussie ne révèle pas (ex. accès à un élément de tableau hors limites).
|
||||
- Le clavier cible du jeu est **AZERTY** : vérifier les mappings de touches existants (`IMC_Sandbox`, `IMC_AGIS_Character`, `IMC_AGIS_InventoryTab`) avant d'assigner une nouvelle touche, et choisir des touches physiquement identiques entre QWERTY/AZERTY.
|
||||
|
||||
---
|
||||
|
||||
## 10. Maintenir ce document à jour
|
||||
|
||||
Ce document **doit toujours refléter l'état réel du projet**. Un skill dédié — **`maintain-architecture-doc`** (`.claude/skills/maintain-architecture-doc/SKILL.md`) — rappelle systématiquement aux modèles d'IA de :
|
||||
|
||||
1. Consulter ce document avant de modifier la structure du projet.
|
||||
2. Le mettre à jour après toute création/suppression/déplacement/renommage de fichier ou dossier important.
|
||||
3. Ajouter une description pour tout nouveau fichier important.
|
||||
4. Retirer les entrées obsolètes (fichiers supprimés).
|
||||
5. Corriger les chemins après un déplacement.
|
||||
6. Mettre à jour les descriptions quand un système évolue significativement.
|
||||
7. Vérifier périodiquement la cohérence entre ce document et l'arborescence réelle.
|
||||
8. Ne jamais laisser ce document dans un état sciemment obsolète après une modification de structure.
|
||||
|
||||
**Règle de detail** : un fichier "important" à documenter est un Blueprint/Widget/Data Asset/Struct/Enum/Input Action qui porte de la **logique ou des données de gameplay**. Les assets purement artistiques individuels (textures, meshes, clips d'animation, miniatures) n'ont pas besoin d'entrée dédiée — il suffit que leur **dossier parent** soit listé et décrit (cf. §8).
|
||||
|
||||
*Historique de nettoyage :*
|
||||
- *2026-09-04 : `Content/Systems/Blueprints/d/SandboxCharacter_CMC_ABP` renommé/déplacé vers `Content/Systems/Blueprints/SandboxCharacter_CMC_ABP` via l'outil de renommage Unreal (les 7 références ont été recâblées automatiquement, compilation vérifiée OK).*
|
||||
- *2026-09-04 : suppression de 8 redirecteurs Unreal morts (résidus de renommages passés, 0 référence chacun, confirmés sans danger) : `Content/Systems/Stats/ACStats.uasset`, `Content/Systems/Movement/BPC_ClimbingComponent.uasset`, `Content/Systems/Movement/ClimbingMaterial.uasset`, `Content/Systems/Movement/CR_ClimbingGraphV2.uasset`, `Content/Systems/Movement/CR_Mannequin_BasicFootIK.uasset`, `Content/BP_TickManager.uasset`, `Content/dqs.uasset`, `Content/E_WeaponType.uasset`. Les vraies versions de ces assets restent à `Content/Systems/Movement/Climbing/`, `Content/Core/Tick/BP_TickManager` et `Content/Data/Enums/E_WeaponType`.*
|
||||
|
||||
*Point de nettoyage identifié mais volontairement non traité : `Content/DT_DemoTags.uasset` (+ `.T3D`) — aucune référence trouvée, semble être un reste de test, laissée en l'état à la demande de l'utilisateur (voir §2.1).*
|
||||
@@ -31,9 +31,9 @@ DefaultGraphicsRHI=DefaultGraphicsRHI_DX11
|
||||
bGenerateNaniteFallbackMeshes=True
|
||||
Compiler=Default
|
||||
AudioSampleRate=48000
|
||||
AudioCallbackBufferFrameSize=1024
|
||||
AudioNumBuffersToEnqueue=1
|
||||
AudioMaxChannels=0
|
||||
AudioCallbackBufferFrameSize=2048
|
||||
AudioNumBuffersToEnqueue=4
|
||||
AudioMaxChannels=64
|
||||
AudioNumSourceWorkers=4
|
||||
SpatializationPlugin=
|
||||
SourceDataOverridePlugin=
|
||||
@@ -125,3 +125,30 @@ ManualIPAddress=
|
||||
[/Script/UnrealEd.CookerSettings]
|
||||
bCookOnTheFlyForLaunchOn=True
|
||||
|
||||
[/Script/Engine.AudioSettings]
|
||||
DefaultSoundClassName=/Engine/EngineSounds/Master.Master
|
||||
DefaultMediaSoundClassName=/Engine/EngineSounds/Master.Master
|
||||
DefaultSoundConcurrencyName=None
|
||||
DefaultBaseSoundMix=None
|
||||
VoiPSoundClass=None
|
||||
MasterSubmix=/Engine/EngineSounds/Submixes/MasterSubmixDefault.MasterSubmixDefault
|
||||
BaseDefaultSubmix=None
|
||||
ReverbSubmix=/Engine/EngineSounds/Submixes/MasterReverbSubmixDefault.MasterReverbSubmixDefault
|
||||
EQSubmix=/Engine/EngineSounds/Submixes/MasterEQSubmixDefault.MasterEQSubmixDefault
|
||||
VoiPSampleRate=Normal24000Hz
|
||||
DefaultAudioCompressionType=RADAudio
|
||||
DefaultOcclusionCheckInterval=(Default=0.100000,PerPlatform=())
|
||||
MaximumConcurrentStreams=16
|
||||
GlobalMinPitchScale=0.400000
|
||||
GlobalMaxPitchScale=2.000000
|
||||
+QualityLevels=(DisplayName=NSLOCTEXT("AudioSettings", "DefaultSettingsName", "Default"),MaxChannels=32)
|
||||
bAllowPlayWhenSilent=True
|
||||
bDisableMasterEQ=False
|
||||
bAllowCenterChannel3DPanning=False
|
||||
NumStoppingSources=8
|
||||
PanningMethod=Linear
|
||||
MonoChannelUpmixMethod=Linear
|
||||
DialogueFilenameFormat="{DialogueGuid}_{ContextId}"
|
||||
bEnableLegacyAssetTypes=False
|
||||
PlatformSettings=()
|
||||
|
||||
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Content/Characters/UEFN_Mannequin/Animations/MotionMatchingData/CHT_PoseSearchDatabases_Dense.uasset
LFS
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in new issue
Block a user