Session debug fusil : équipement, visée, main gauche, MetaHuman

- B équipe Arme 1 sans présélection (ToggleQuickEquip) ; suppression du
  Debug Key B du Mover qui faisait tourner Weapon/isArmed.
- Overlay AST : BP_GameInstance implémente BPI_ASTGI (DA_QuickSetupSettings
  restauré avec ses poses), IA_Aim appelle BPC_StateManager::SetInputAim,
  OverlayGraph lit l'état d'overlay du StateManager à l'init.
- Main gauche : os virtuels hand_r/ik_hand_l ajoutés au squelette, socket
  Rifle recalé sur le socket SMG d'AST, IK main gauche sur le VB avec offset
  vers le haut du garde-main.
- MetaHuman : goals mains + LimbSolvers dans IK_MetaHuman_test, mains calées
  sur le mannequin (BlendToSource) et doigts en OneToOne + pose alignée dans
  RTG_UEFN_to_MetaHuman_test.
- ANS_WeaponTransformCorrection : garde IsValid (plus d'Accessed None sans
  l'inventaire AST).
- Stuff de test : Initial Items (fusil, chargeur, 60 munitions) sur
  Inventory_Player du Mover.
- Ajout du portage AST jamais commité (StateManager, ASTShared, Cover,
  Interaction, L_ASTCoverTest) ; ~1300 anims UEFN ré-enregistrées par
  l'ajout des os virtuels.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
DodoandClaude Opus 5.5 committed 2026-10-31 14:58:26 +01:00
1 parent d19df0a428
commit acaf1e564d
1919 files changed
+4414 -2737

No files matched your search

+30
View File
@@ -459,6 +459,36 @@ Ce qui ne marchait PAS et a été corrigé :
Vérifié en PIE, dans cet ordre : ramassage du fusil → dos ; V+B → main + `Weapon = Riffle`, `Weapon_Equip = Riffle`, `isArmed = true` côté pion ET côté ABP ; locomotion désarmée propre avec le fusil en main (pas de T-pose) ; arc → `PSD_Dense_Stand_Bow_Idles` → `StandingIdle01_UE_Anim3` ; arc + clic droit → `Want Toshot = true` → `PSD_Dense_Stand_Bow_Aim_Idles` ; arc en course → repli propre sur `PSD_Dense_Stand_Run_Loops` ; clic gauche → `EventPrimaryUse` du fusil (qui refuse de tirer faute de chargeur équipé — comportement normal, non lié au Mover) ; non-régression prone (`PSD_Dense_Prone_Idles`) et nage (`PSD_SwimmingMoving`).
**Correctif 2026-10-31 — « je ramasse le fusil mais B ne l'équipe pas »** :
- `Inventory_Player::ToggleQuickEquip` (touche **B**) n'équipait que le slot choisi au préalable avec **V** (`WB_QuickSelect` fait `CycleQuickSlot` à chaque ouverture, donc chaque appui sur V avance d'un slot). Sans sélection (`SelectedQuickSlot = 0`), B affichait « Aucun item selectionne ». Désormais, slot 0 → `SelectQuickSlot(1)` (Arme 1) puis le chemin normal `GetQuickSlotItemInfo` → `SwitchWeaponByUID`. V reste le moyen de choisir un autre slot.
- Supprimé de `SandboxCharacter_Mover` l'événement **`Debug Key B`** (20 nœuds) : il faisait tourner `Weapon` (Riffle → Pistoll → Bow → None) et écrivait `isArmed` à chaque appui sur B, en concurrence directe avec l'équipement.
- Vérifié en PIE : E (dos, `SpineRifle`) → B (main, `Weapon_Equip = Riffle`, `isArmed = true`) → B (rangé) → B (ressorti).
**Correctif 2026-10-31 — fusil tenu à une main, bras ballant, aucune pose de visée** :
- L'overlay AST (`OverlayGraph`, états `SMG Relaxed / Combat / Aim`…) tire ses poses de `BPFL_AST::GetOverlayAnimSet`, qui interroge le **GameInstance** via l'interface `BPI_ASTGI`. Aucune classe du projet ne l'implémentait → `overlay Anim Set` vide → overlay neutre, quel que soit l'`OverlayState`. Conséquence en cascade : au rangement du 2026-10-30, `DA_QuickSetupSettings` et presque toutes les poses de `Poses/OverlayPoses/` semblaient orphelins et avaient été supprimés.
- Restaurés (sauvegarde `ProjectFv1_backup_reorg_2026-10-30`, struct depuis `ProjectFv1_backup_ast_port_2026-09-27`) : `StateManager/QuickSetup/DA_QuickSetupSettings`, `Blueprints/Data/PDA_QuickSetupSettings`, `Blueprints/Structs/S_QuickSetupVariables`, les poses `OverlayPoses/{Default,DefaultMelee,Submachinegun,Handgun,SniperRifle,Bullpup,Longshotgun}Poses`, et 14 montages `Character/Animations/Melee/*_Montage` référencés par le DA. ⚠️ Ces montages de mêlée sont **incomplets** (anims, sons et notifies AST Melee jamais portés) : à ne pas jouer tant que la mêlée n'est pas portée.
- `BP_GameInstance` implémente `BPI_ASTGI` : variable `QuickSetupSettings` (= `DA_QuickSetupSettings`) et `Get Overlay Animset` renvoie `QuickSetupVariables.OverlayAnimationSet`. Les trois autres fonctions de l'interface (mêlée, parkour, effets) restent vides.
- `SandboxCharacter_Mover`, graphe `CameraCh`, `IA_Aim` : `Triggered` → `BPC_StateManager::SetInputAim(ActionValue AND isArmed)`, `Completed` → `SetInputAim(false)`. C'est ce qui passe `RotationState` à `Aim` et fait entrer l'overlay dans l'état `… Aim`. Au relâchement, AST remet `DefaultRotationState` (= `Strafe`), pas `Orient`.
- Vérifié en PIE : équipé → les deux mains tiennent le fusil (pose SMG relâchée) ; clic droit maintenu → fusil épaulé, pointé devant.
**Correctif 2026-10-31 — main gauche à côté du fusil en visée** :
- `WeaponIKGraph` pose les mains par `TwoBoneIK` vers des os virtuels AST (`VB RHS_ik_hand_l`, `VB LHS_ik_hand_r`) absents de notre squelette → IK sans effet. Ajoutés à `SK_UEFN_Mannequin` sous les noms `VB hand_r_ik_hand_l` / `VB hand_l_ik_hand_r` (Python ne peut pas les renommer) et `TwoBoneIK_2` (main droite) repointé dessus.
- **Comment AST tient une arme** (lu dans `E:\AST_V1_17`) : même squelette `SK_UEFN_Mannequin` que nous (`RHS`/`LHS` ne sont pas des os, juste des os virtuels renommés `hand_r→ik_hand_l` etc.). L'arme s'attache à un **socket par famille sur `hand_r`** (`SMG`, `Shotgun`, `Shotgun1`, `Pistol`, `PistolL`), et la main gauche vient **uniquement de l'animation** (`ik_hand_l` relatif à `hand_r`) : le socket `OffHandIK` des armes AST et `BPI_Firearm::GetLeftHandIKBone` ne sont appelés nulle part. Vérifié : l'`OffHandIK` de `SKM_SMG` tenue au socket `SMG` tombe à 2 cm du `ik_hand_l` de `SMG_Aim_Pose`.
- **Socket `Rifle` recalé sur le socket AST `SMG`** (2026-10-31) : orientation = celle de la SMG AST (canon de `SKM_SMG` sur +Y, du nôtre sur +X → lacet de 90°), position choisie pour garder notre point de prise main droite. Nouveau : loc (-21.90, 11.28, 4.74), rot (P -4.60, Y 158.94, R 0.98) ; ancien : loc (-24.56, 3.89, 3.31), rot (P -7.83, Y 177.40, R 0). L'ancien socket faisait pointer le canon ~20° à côté de la direction de visée des poses AST.
- **Main gauche** (`TwoBoneIK_0` et `_5`) : cible `VB hand_r_ik_hand_l` (orientation de prise de l'anim, `Take Rotation From Effector Space`) + offset en espace os (1.25, -4.96, -4.88), qui met le poignet au point (11, -6, 7) de `SM_RifleAdvanced` = bord supérieur gauche du garde-main. La pose AST est une prise par-dessus (dos de la main en haut, doigts sur le flanc) : un poignet à mi-hauteur laissait la main pendre sous le garde-main. Mesuré : 0 cm en visée, 0,9 cm en pose relâchée. ⚠️ Calé sur ce fusil ; une autre arme demandera son socket et son offset. Ne pas cibler `hand_r` + offset (la main hérite de l'orientation de la main droite). Le socket `LH_IK` du mesh, lui, n'est utilisé par rien.
- `ANS_WeaponTransformCorrection` (notify des montages d'équipement AST) ramène l'arme de l'**inventaire AST** (composant tagué `InventorySystem`) vers une transform relative nulle. Notre pion utilise AGIS → arme `None` → ~940 « Accessed None » par session. Ajout d'un `IsValid` sur `Weapon` avant `SetActorRelativeTransform` : no-op chez nous (AGIS attache déjà le fusil pile sur le socket), inchangé si un inventaire AST est présent. Vérifié : 0 erreur Blueprint sur équiper/ranger/rééquiper/viser.
- Restant : `OverlayGraph`, `OverrideOverlayLayer`, `BoneTrackPoint`, `InteractionControlRig`, `WeaponCollisionControlRig` référencent encore les noms d'os virtuels AST ; pas de socket AST pour pistolet/fusil à pompe tant qu'on n'a qu'un fusil.
**Correctif 2026-10-31 — mains et doigts du MetaHuman (ce qu'on voit vraiment)** : le MetaHuman visible n'est qu'une copie par retarget du mannequin caché, qui porte l'arme et l'IK (voir §4.2.4). Trois défauts dans `Systems/Mover/VisualOverrides/` :
- `IK_MetaHuman_test` n'avait **aucun goal ni solveur** (les chaînes `LeftArm`/`RightArm` pointaient vers des goals `LeftHandIK`/`RightHandIK` inexistants) → l'op « Retarget IK Goals » ne faisait rien et les mains du MetaHuman tombaient ~17 cm à côté de celles du mannequin (bras plus longs, épaules plus hautes). Ajoutés : goals `LeftHandIK` (`hand_l`) et `RightHandIK` (`hand_r`) + un `IKRigLimbSolver` par bras (racine `upperarm_l`/`_r`). Pieds non touchés (toujours FK).
- `RTG_UEFN_to_MetaHuman_test`, op « Retarget IK Goals » : `LeftArm`/`RightArm` en `BlendToSource = 1` (rotation laissée à 0 : la rotation brute du mannequin n'apporte rien et ignore les écarts de pose de référence) → mains du MetaHuman exactement sur celles du mannequin (écart mesuré < 0,1 cm), donc sur l'arme. `ABP_GenericRetarget` peut encore moduler ce réglage avec les courbes `Retarget_Hand_L/R_BlendToSource` (Lerp vers 1, donc sans effet ici).
- Doigts : chaînes doigts + métacarpes de l'op « FK Chains » en `OneToOne`, et **pose de retarget du MetaHuman auto-alignée (`ChainToChain`) sur les 30 os de doigts**. Avant, la flexion des doigts de l'anim se perdait (index 2° au lieu de 24°) parce que les poses de référence des deux squelettes ne concordaient pas.
- Vérifié en PIE : en visée, doigts gauches et droits fléchis comme sur le mannequin ; au repos, bras et mains naturels.
**Correctif 2026-10-31 — état d'overlay écrasé à l'initialisation** : `OverlayGraph::BlueprintInitializeAnimation` réécrivait `Overlay State` avec `GetStartWeaponOverlayState` du composant d'inventaire AST, que notre pion n'a pas → `None` à chaque init. Il lit désormais `StateManager` (cast en `StateActorComponent`) → `GetOverlayState`.
**Équipement de départ (test)** : `Inventory_Player` du `SandboxCharacter_Mover` a `Initial Items` = `Rifle` ×1, `Magazine` ×1, `Ammo1` ×60 → au spawn, fusil sur le dos (`SpineRifle`), **B** pour le prendre en main. Piège AGIS : les `Items` posés dans les conteneurs d'un `InventoryData` (DataAsset) **ne sont pas chargés** ; seul `Initial Items` passe par `LoadSubItem` (graphe `INITIALIZATION` de `Inventory__Main`), comme le casque de `BP_Deadman`. À vider avant une build de jeu.
Restant à faire :
- Aucune base Motion Matching armée pour le fusil / le pistolet (seul l'arc en a) ; `PSD_Crouch_Bow` existe mais n'est référencée par aucune ligne de chooser.
- `SandboxCharacter_Mover` a désormais un `AC_Stats` et ses capsules de hitbox (voir « Hitboxes calées sur le MetaHuman » en §4.2.4) ; il lui manque encore le `PerceptionStimuliSource` du CMC.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loaded 100 of 1919 files, more files were not shown because too many files have changed in this diff. Show more