Page 1 sur 2

Dossier fonctionnel pour grouper et gèer la couleurs des meshRenderer

Publié : 25 Mars 2019 18:38
par scorjeff
Bonjour,

Je reviens vers vous pour une question de fonctionnement de dossier contenant des meshrenderer.

Je m'explique :
J'ai importé en FBX de Blender un objet avec beaucoup de NurbsCurve (Blender) devenu meshRenderer (Unity).
L'objectif, c'est de grouper les 220 parts pour les gérer (ils changent de couleurs grace à un bouton). Bien sùr, j'essaie de les grouper ou les joindre avec Blender avant import sans succès pour l'instant.

Mes tests : créer un Préfab pour placer dedans les MeshParts = fonctionne pas.
Créer un shader, j'ai pas encore réussi.
Créer un dossier gameObject empty, puis child empty, et lui donner les propriétés de Mesh Renderer, même chose, çà marche pas. L'objet ne change pas de couleur.

Sachant qu'un dossier "normal" avec les mesh renderer importé dedans (mode drag and drop) fonctionne. Mais c'est dommage de configurer 220 mesh, si je peux gérer un folder les contenant tous.

Si vous voulez d'autres explications, ce n'est peut-être pas très clair, je peux sans soucis. Merci de votre compréhension.

Re: Dossier fonctionnel pour grouper et gèer la couleurs des meshRenderer

Publié : 26 Mars 2019 09:58
par boubouk50
Qu'entends-tu par changer de couleur du MeshRenderer? Changer la couleur du matériau?
S'ils possèdent tous le même matériau, changer la couleur du matériau revient à changer la couleur de tous les objets. Il faut que tu crées un nouveau matériau que tu affectes à tous les MeshRenderer. Pour effectuer un changement sur tous les éléments ensemble, tu peux tous les sélectionner et glisser déposer le matériau.

Re: Dossier fonctionnel pour grouper et gèer la couleurs des meshRenderer

Publié : 26 Mars 2019 18:48
par scorjeff
Bonjour,

J'étais de ne pas être très clair.
Voici en image si ça passe. J'importe 220 objet depuis blender en FBX.
Mon objectif, c'est de travailler sur le folder fils_1 pour changer la couleur via un script les 220 objets du contenu NurbsCurve.
Principe du dossier parent et objet enfant. si on configure le dossier les enfants suivent....
Ma première idée était de fusionner ts les Nurbs en un seul, mais celà ne marche pas. Si j'ai pas de solution, je veux bien gérer un par un, mais c'est dommage.

Image

Serait-ce plus comme explications?

Merci bien et bonne soirée à toi et autres bien sùr.

Re: Dossier fonctionnel pour grouper et gèer la couleurs des meshRenderer

Publié : 26 Mars 2019 18:54
par Max
Bonsoir,

As tu essayé ce que proposait Boubouk ? Tu assignes à tes NurbsCurve_222_MeshPartX le même material, et tu n'as juste qu'a changer la couleur du material. De fait, tous les NurbsCurve_222_MeshPartX changeront en même temps en une seule opération.

Re: Dossier fonctionnel pour grouper et gèer la couleurs des meshRenderer

Publié : 27 Mars 2019 14:41
par scorjeff
Bonjour à vous deux,

Je vais essayer, je reviens vers vous en fonction des résultats et tests.

Bonne journée.

Re: Dossier fonctionnel pour grouper et gèer la couleurs des meshRenderer

Publié : 29 Mars 2019 09:01
par scorjeff
Bonjour,

Je reviens après tests et investigations. Le principe que Boubouk propose je l'utilise, je crois.
Puisque j'ai créé 9 matérials pour 9 couleurs, ces matérials sont placés dans l'inspector sur des objets dédiés au changement de couleur. Cà fonctionne, j'ai suivi les deux vidéos ci-dessous pour comprendre. La couleur, le bouton et le script fonctionnent sur les mesh renderer. "je clique, l'objet change la couleur par celle que je choisis".

https://www.youtube.com/watch?v=y2JwMb4WZeQ
https://www.youtube.com/watch?v=6zNHaLdVk80

Mais je ne comprends comment placer plusieurs couleurs sur un matérial, il n'en prend qu'une, à moins qu'il y est une fonction que je connais pas. Je pense à un script donc, et pour çà, je dois changer le principe de fonctionnement. Ce qui est envisageable. J'ai cherché et vu plusieurs vidéos, ce serait un script qui ressemble à çà?
https://www.youtube.com/watch?v=Qh64cpCxk54

C'est cette méthode que tu parles et est-ce qu'on parle de la même chose?

Bonne journée. Cdt

Re: Dossier fonctionnel pour grouper et gèer la couleurs des meshRenderer

Publié : 29 Mars 2019 10:33
par boubouk50
Tes questions sont plutôt générales, alors on répond large aussi.

Oui, pour changer une couleur de matériau, je préconise de changer la propriété color du matériau. Cela changera la teinte globale du matériau.

Re: Dossier fonctionnel pour grouper et gèer la couleurs des meshRenderer

Publié : 09 Avr 2019 17:16
par scorjeff
Bonjour à vous,

J'ai pu progresser dans les scripts pour changement de color du material. Je crois que j'y suis presque après pas mal de recherche.

J'ai pu avoir ce script pour changer la couleur des objets qui compose le fil. Par contre le code List, je suis pas sur que les materials soi en list, c'est un point obscure.

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
 //changement color du fil/thread
 //sur chaque objet
 
public class ThreadChange : MonoBehaviour{
 
	     public static List<GameObject> list = new List<GameObject>();
     void Start () {
         list.Add(gameObject);
     }
     void OnDestroy() {
         list.Remove(gameObject);
     }
   }
Et j'ai ce script pour chaque bouton, l'idée est de tester une couleur, si ça matche, j'applique à toutes les couleurs présente. Mais j'ai l'erreur error CS0117: `ThreadChange' does not contain a definition for `Materials'. Je pense avoir oublier qqchose

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

	//sur le bouton
	
public class CCThreadV : MonoBehaviour {

	public void changeRed()
     {
         foreach (GameObject threadChange in ThreadChange.Materials)
             ThreadChange.GetComponent<Renderer>().sharedMaterial.color = Color.red;
     }
}
Merci de votre contribution, j'espère ne pas faire fausse route.

@+
 ! Message de : boubouk50
Merci d'utiliser les balises CODE prévues à cet effet

Re: Dossier fonctionnel pour grouper et gèer la couleurs des meshRenderer

Publié : 09 Avr 2019 17:58
par EmileF
Si je ne me trompe pas ce petit script te permettra de changer la couleur de chaque mesh, indépendamment du matérial

Code : Tout sélectionner

    
    private void Colorise(MeshRenderer mesh, Color color)
    {
        MaterialPropertyBlock block = new MaterialPropertyBlock();
        mesh.GetPropertyBlock(block);
        block.SetColor("_Color", color);
        mesh.SetPropertyBlock(block);
    }

Re: Dossier fonctionnel pour grouper et gèer la couleurs des meshRenderer

Publié : 09 Avr 2019 18:03
par boubouk50
la réponse est dans l'erreur: Qu'est ce que ThreadChange.Materials?
Tel quel, tu cherches une liste nommée Materials, propriétés de la classe ThreadChange. Mais elle n'existe nulle part.
Tu as par contre une liste de GameObjects appelée list.

Dans la forme par contre, je pense que tu fais fausse route. Si les gameObjects partagent le même material, alors un simple changement de couleur du sharedMaterial suffit.
Au lieu, d'aller dire à tous: changer votre couleur. Dis au matériau utilisé par tous de changer de couleur, comme ça tous changeront.