remplacer le matériau de chaque enfant par un autre matériau

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Avatar de l’utilisateur
Kaloverian
Messages : 341
Inscription : 10 Août 2016 03:03

remplacer le matériau de chaque enfant par un autre matériau

Message par Kaloverian » 16 Mars 2022 21:11

bonjour,

Je dispose d'un objet cube ayant par exemple 3 enfants ayant déjà un mesh et un matériau.

Avec cette fonction:

Code : Tout sélectionner

public Material new_mat;
public GameObject cube;
void Start()
{
color_cell_selected(new_mat);
 }
  void color_cell_selected(Material mat)
    {   
         Renderer[] children=new Renderer[3];
       
         children =  cube..GetComponentsInChildren<Renderer>();
      
         foreach (Renderer rend in children)
     {
         var mats = new Material[rend.materials.Length];
         for (int m = 0; m < rend.materials.Length; m++)
         {
             mats[m] = mat;
         }
         rend.materials = mats;
     }
         
        
    }

je change en un seul coup tous les materiaux de chzque enfant par un seul et unique nouveau materiau mat
(tous les enfants sont mat)

Ce n'est pas tout à fait ce que je souhaite faire car mon but est ceci:
enfant 1 a un nouveau materiau mat1=yellow
enfant 2 a un nouveau matériau mat2=red
enfant 3 a un nouveau matériau mat3=green

Si j'écris ce code:n°2:

Code : Tout sélectionner

public Material yellow,red,green;
public GameObject cube;

void Start()
{  Material[] mat=new Material[3];
    mat[0]=yellow;
    mat1[1]=red;
    mat[2]=green; 
    
    color_cell_selected2(mat);}

 void color_cell_selected2(Material[] mat)
    {   
         Renderer[] children=new Renderer[3];
       
         children =  cube..GetComponentsInChildren<Renderer>();
      
         foreach (Renderer rend in children)
     {
         var mats = new Material[rend.materials.Length];
         for (int m = 0; m < rend.materials.Length; m++)
         {
             mats[m] = mat[m];
         }
         rend.materials = mats;
     }
         
        
    }

cela ne fonctionne pas !

Peut-on me corriger le code n°2 pour que cela fonctionone?


merci de votre aide

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6208
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: remplacer le matériau de chaque enfant par un autre matériau

Message par boubouk50 » 17 Mars 2022 10:33

Passe plutôt par le MaterialPropertyBlock et sa méthode SetColor (Color c).
C'est très simple et bien plus efficace.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Répondre

Revenir vers « (C#) CSharp »