Page 1 sur 1

[Resolu]Tracer une ligne qui suit la souris

Publié : 29 Mai 2020 20:24
par EmileF
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.

Re: Tracer une ligne qui suit la souris

Publié : 01 Juin 2020 11:23
par DevAmat
Juste une précision, tu veux tracer une ligne sur UI c'est à dire en 2D? Et non pas dans le 3D?

Re: Tracer une ligne qui suit la souris

Publié : 02 Juin 2020 10:19
par EmileF
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

Re: Tracer une ligne qui suit la souris

Publié : 02 Juin 2020 11:09
par Max
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.

Re: Tracer une ligne qui suit la souris

Publié : 02 Juin 2020 13:22
par djulio74
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.
:)

Re: Tracer une ligne qui suit la souris

Publié : 02 Juin 2020 19:52
par EmileF
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

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

Publié : 03 Juin 2020 11:23
par DevAmat
Super, merci d'avoir poster ta solution :super: