(Fix) Vider les materiaux surcharges au changement de mesh

Passer du corps A au corps B donnait une silhouette feminine peinte avec la
peau et les abdominaux du modele masculin.

OverrideMaterials appartient au COMPOSANT et pas au mesh : SetSkeletalMeshAsset
remplace l'asset sans y toucher, donc le MID derive de MI_BodyA_a restait colle
a l'element 0. Le symptome trompe, parce que le mesh, lui, avait bien change --
seule sa peau ne suivait pas.

SetPartMesh() vide les overrides avant d'assigner, et rend la main sans rien
faire quand le mesh est deja le bon : un changement de couleur seul continue
ainsi de reutiliser les MID en place au lieu de tout reconstruire.

Vaut pour toutes les pieces, pas seulement le corps -- changer de tete ou de
coiffure donnait le meme symptome.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-08 20:02:02 +02:00
parent 5970db0512
commit e8e128457a
2 changed files with 33 additions and 4 deletions
@@ -133,6 +133,15 @@ private:
void ApplyColors(const FCharacterBodySet& BodySet);
/** Pose un parametre vectoriel sur TOUS les elements d'un mesh. */
/**
* Assigne un mesh a un composant en vidant d'abord ses materiaux surcharges.
*
* Indispensable : OverrideMaterials appartient au COMPOSANT, pas au mesh, et
* survit donc a un changement d'asset. Sans ce vidage, le corps B garderait
* la peau du corps A.
*/
static void SetPartMesh(USkeletalMeshComponent* MeshComponent, USkeletalMesh* NewMesh);
static void TintAllElements(USkeletalMeshComponent* MeshComponent, FName Parameter, const FLinearColor& Color);
/** Le mesh porteur, leader de tous les autres. */