[Resolu][DB/AL] LineRenderer problème de dégradé de couleur

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
EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

[Resolu][DB/AL] LineRenderer problème de dégradé de couleur

Message par EmileF » 09 Avr 2019 17:45

Bonjour, me revoilà encore avec une petite question

J'essaye de créer un script, (qui est en fait une extension de GameObject, mais c'est pas là le problème, mais ça explique le "this GameObject objet", pour ceux qui ne connaîtraient pas).
Ce script est sensé me créer un LineRenderer à partir de l'objet et jusqu'à la position cible.
Cette ligne doit progressivement changer de couleur.

La ligne s'affiche bien, mais la couleur reste désespérément grise et les couleurs colorstart, et colorend ne sont pas appliquées.

Dans le script, il y a 2 versions pour générer le gradient, aucune des 2 ne marche.

Je n'arrive pas à trouver le bas qui blesse, est-ce que quelqu'un pourrait m'aider s'il vous plait.

J'ai essayé en mode édition et ça ne marche pas non plus. Il doit y avoir quelque chose qui m'échappe

Code : Tout sélectionner

    public static void DrawLine(this GameObject objet, Vector3 cible, Color colorstart, Color colorend)
    {
        LineRenderer lr = objet.GetComponent<LineRenderer>();
        if (lr == null)
        {
            objet.AddComponent<LineRenderer>();
            lr = objet.GetComponent<LineRenderer>();
        }
        
        if (lr.material == null)
        {
            lr.material = new Material(Shader.Find("Sprites/Default"));
        }
        
        lr.startWidth = 0.1f;
        lr.endWidth = 0.1f;
        lr.SetPosition(0, objet.transform.localPosition);
        lr.SetPosition(1, cible);
        
	//Version 1
        //float alpha = 1.0f;
        Gradient gradient = new Gradient();
        //gradient.SetKeys(
        //    new GradientColorKey[] { new GradientColorKey(colorstart, 0.0f), new GradientColorKey(colorend, 1.0f) },
        //    new GradientAlphaKey[] { new GradientAlphaKey(alpha, 0.0f), new GradientAlphaKey(alpha, 1.0f) }
        //);
        
        //Version 2
        gradient.colorKeys = new GradientColorKey[]
        {
            new GradientColorKey(colorstart, 0.0f),
            new GradientColorKey(colorend, 1.0f)
        };

        lr.colorGradient = gradient;
    }

Dernière édition par EmileF le 09 Avr 2019 19:22, édité 1 fois.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

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

Re: [DB/AL] LineRenderer problème de dégradé de couleur

Message par boubouk50 » 09 Avr 2019 18:08

Et en utilisant le gradient.SetKeys de l'exemple de la documentation?

Code : Tout sélectionner

gradient.SetKeys(
            new GradientColorKey[] { new GradientColorKey(colorstart, 0.0f), new GradientColorKey(colorend, 1.0f) },
            new GradientAlphaKey[] { new GradientAlphaKey(1.0f, 0.0f), new GradientAlphaKey(1.0f, 1.0f) }
        );
"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

EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

Re: [DB/AL] LineRenderer problème de dégradé de couleur

Message par EmileF » 09 Avr 2019 18:15

Merci Boubouk, mais c'est ma version 1 , regarde dans mon script, il y a 2 versions que j'ai essayé, et ça ne marche pas non plus.

Entre temps j'ai fais d'autre test et je n'arrive même pas à avoir une couleur unie. C'est uniquement en changeant le couleur du matérial que j'arrive à changer la couleur de la ligne, mais pas de dégradé.

Je comprend pas
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

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

Re: [DB/AL] LineRenderer problème de dégradé de couleur

Message par boubouk50 » 09 Avr 2019 18:28

Au temps pour moi.
Force le matériau plutôt que de le faire si aucun n'est affecté. Il se peut que cela fonctionne seulement pour le shader Sprites/default.
"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

EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

Re: [DB/AL] LineRenderer problème de dégradé de couleur

Message par EmileF » 09 Avr 2019 19:07

Effectivement, Ma première erreur était que j'avais utilisé un matérial standard dans mes essais manuel dans l'editeur.

En modifiant le standard en Sprites/Default ça fonctionne, mais dans mon script, j'utilise Sprites/Default, mais en vérifiant dans l'inpector j'ai pu observer qu'il se transforme en Default matérial, je ne comprends pas pourquoi.
Est-ce qu'il y aurait une faute d'orthographe ? Comment peut on avoir la liste des nom des shaders d'unity ?
Autant de questions dont je n'arrive pas à trouver de réponse.


Edit:
Ca y est, j'ai trouvé, mon erreur était en fait dans le script, ici:

Code : Tout sélectionner

        if (lr.material == null)
        {
            lr.material = new Material(Shader.Find("Sprites/Default"));
        }
Je suppose que Material n'est jamais null dans ce cas et il ne fallait pas mettre de condition;

Code : Tout sélectionner

            lr.material = new Material(Shader.Find("Sprites/Default"));
Comme ça , ça marche, merci Boubouk. tes quelques explications m'ont convainquent qu'il était dans le script le problème.
Dernière édition par EmileF le 09 Avr 2019 19:19, édité 1 fois.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB/AL] LineRenderer problème de dégradé de couleur

Message par Max » 09 Avr 2019 19:12

Bonsoir,

je pense que tu pars d'une hypothèse que ne se vérifie pas.
Tu affectes ton material que si lr.material == null, ce qui n'est pas le cas. Donc lr.material = new Material(Shader.Find("Sprites/Default")); n'est pas traité.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

Re: [DB/AL] LineRenderer problème de dégradé de couleur

Message par EmileF » 09 Avr 2019 19:20

Merci à vous,, Max nos messages se sont croisés, l'erreur était bien là.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

Répondre

Revenir vers « (C#) CSharp »