[Resolu]Tracer une ligne qui suit la souris

Questions à propos du scripting Shader.
EmileF
Messages : 619
Inscription : 18 Mars 2017 19:39

[Resolu]Tracer une ligne qui suit la souris

Message par EmileF » 29 Mai 2020 20:24

Bonjour,

Je voudrais tracer une ligne qui suit la souris, un peu comme si on voulait écrire sur l'écran avec la souris.

J'ai pensé que cela pouvait être possible avec les shaders mais malgré mes recherches je n'ai pas trouvé l'ombre d'un renseignement.

Si quelqu'un pouvait me donner une idée sur la direction à emprunter, pour obtenir ce résultat avec les shaders ou autre.

Merci d'avance.
Dernière édition par EmileF le 02 Juin 2020 19:53, édité 1 fois.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

Avatar de l’utilisateur
DevAmat
Messages : 300
Inscription : 23 Nov 2016 11:50

Re: Tracer une ligne qui suit la souris

Message par DevAmat » 01 Juin 2020 11:23

Juste une précision, tu veux tracer une ligne sur UI c'est à dire en 2D? Et non pas dans le 3D?

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

Re: Tracer une ligne qui suit la souris

Message par EmileF » 02 Juin 2020 10:19

Salut DevAmat,

Je suis en train d'y travailler dessus et en fait, j'utilise la technique de la texture dynamique.

Le but était de suivre un chemin comme dans un labyrinthe, de laisser une trace du chemin parcouru, et de pouvoir revenir en arrière.

J'avoue que Djulio m'a été d'un grand secours.

Je posterai le résultat quand ce sera terminé.

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

Avatar de l’utilisateur
Max
Newser
Newser
Messages : 7883
Inscription : 30 Juil 2011 13:57

Re: Tracer une ligne qui suit la souris

Message par Max » 02 Juin 2020 11:09

Hello,

Je ne sais pas quelle solution vous avez adopté, mais perso, j'aurais regardé du coté du Component Trail Renderer, cela pourrait être une solution. A tester.
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

djulio74
Messages : 664
Inscription : 19 Déc 2009 22:55
Contact :

Re: Tracer une ligne qui suit la souris

Message par djulio74 » 02 Juin 2020 13:22

Salut à tous.
Visuellement, le but recherché par Émile ressemble fortement au snake des vieux Nokia,
Un chemin qui se trace carré par carré, mais sans la longueur fixe comme dans snake.

Le problème du trailRendere je pense est la non possibilité de revenir en arrière.
Vu le côté 2d de la chose, j'ai proposé de simplement dessiner une texture, ou chaque pixel représente une unité de déplacement.

Mais EmileF vous montrera sans doute ça quand il aura aboutis.
:)

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

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

Re: Tracer une ligne qui suit la souris

Message par EmileF » 02 Juin 2020 19:52

Bonsoir,

Voilà la base du script permettant de tracer un trait en suivant la souris.

Il faut :
que la textureCurrent soit renseignée dans l'Inspector.
que l'option Read/Write Enabled dans l'import setting de la texture soit cochée
et que le Filter Mode soit à : Point(no filter)
pour que la texture soit modifiable.



Code : Tout sélectionner

    Camera cam;
    public Texture2D textureCurrent;
    int tailleNiveau;
    Vector2Int LastPoint;

    void Start()
    {
        cam = Camera.main;
        transform.localPosition = new Vector3(0.5f, 0, 0.5f);
        Initialise();
    }

    void Update()
    {
        RaycastHit hit;
        if (Physics.Raycast(cam.ScreenPointToRay(Input.mousePosition), out hit))
        {
            int X = Mathf.FloorToInt(hit.point.x * tailleNiveau);
            int Y = Mathf.FloorToInt(hit.point.z * tailleNiveau);
            Vector2Int contact = new Vector2Int(X, Y);

            if (Vector2.Distance(LastPoint, contact) == 1)
            {
                if (textureCurrent.GetPixel(X, Y) == Color.black)
                {
                    textureCurrent.SetPixel(X, Y, Color.white);
                    textureCurrent.Apply();
                    LastPoint = contact;
                }
                else if (textureCurrent.GetPixel(X, Y) == Color.white)
                {
                    textureCurrent.SetPixel(LastPoint.x, LastPoint.y, Color.black);
                    textureCurrent.Apply();
                    LastPoint = contact;
                }
            }
        }
    }

    void Initialise()
    {
        tailleNiveau = textureCurrent.width;
        textureCurrent.filterMode = FilterMode.Point;
        GetComponent<Renderer>().material.mainTexture = textureCurrent;
        for (int x = 0; x < tailleNiveau; x++)
        {
            for (int y = 0; y < tailleNiveau; y++)
            {
                textureCurrent.SetPixel(x, y, Color.black);
            }
        }
        LastPoint = new Vector2Int(0, 0);
        textureCurrent.SetPixel(0, 0, Color.white);
        textureCurrent.Apply();
    }

En espérant que ce soit utile à quelqu'un
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

Avatar de l’utilisateur
DevAmat
Messages : 300
Inscription : 23 Nov 2016 11:50

Re: [Resolu]Tracer une ligne qui suit la souris

Message par DevAmat » 03 Juin 2020 11:23

Super, merci d'avoir poster ta solution :super:

Répondre

Revenir vers « les Shaders »