Page 1 sur 1

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

Publié : 16 Mars 2022 21:11
par Kaloverian
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

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

Publié : 17 Mars 2022 10:33
par boubouk50
Passe plutôt par le MaterialPropertyBlock et sa méthode SetColor (Color c).
C'est très simple et bien plus efficace.