Page 1 sur 2

Création d'une zone en surbrillance

Publié : 18 Août 2019 12:47
par Nathrel
Bonjour,
J'aimerai créer une zone de récolte (aux contours visible ou en surbrillance) dans mon jeu 3D. Le problème, c'est que j'ai beau chercher j'ai qu'une seule façon de faire qui me vient à l'esprit : Celle de créer une objet 3D (Sphère), réduire son échelle de façon à ce que ça soit qu'un cercle et la placer sur mon terrain. Le souci c'est que ce cercle n'épouse pas les formes de mon terrain (les collines, les crevasses, ...). Cette solution fonctionne uniquement sur un terrain plat.
Avez vous une idée de comment je pourrais créer une zone en surbrillance qui match bien avec mon terrain ?
Merci beaucoup !

Re: Création d'une zone en surbrillance

Publié : 18 Août 2019 13:18
par Max
Bonjour,

regarde du coté des decals, cela peux être une alternative intéressante.
Unity+terrain+decals

Re: Création d'une zone en surbrillance

Publié : 18 Août 2019 20:27
par Nathrel
Je t'avoue qu'après avoir cherché toute l'après midi je n'ai rien trouver de concluant concernant les decals. Hormis le fait qu'il faut un Asset (et j'aimerai éviter d'en utiliser). J'ai peut être mal compris , mais en tout cas je ne trouve pas comment le faire de moi même.
Merci !

Re: Création d'une zone en surbrillance

Publié : 18 Août 2019 20:56
par Max
Le principe est d'arriver à plaquer sur ton terrain une surface plane (genre par exemple la primitive Plane proposé par Unity). Pour arriver grosso modo à ceci:
Image

L'une des solutions est de prendre chaque vertex du maillage du plane pour caler sa composante Y sur la hauteur terrain. Ce n'est pas hyper esthétique dès que l'on attaque des zone quasi-verticales du terrain, mais pour le reste, généralement cela fait l'affaire..
Pour la doc, tu peux regarder du coté du MeshFilter.mesh pour la partie Vertex, et aussi du coté de Terrain.SampleHeight pour ce qui est de récupérer les hauteurs terrain.
Après, tu as juste à choisir le shader qui va bien en fonction de ton besoin.

Re: Création d'une zone en surbrillance

Publié : 18 Août 2019 21:02
par Nathrel
C'est exactement ça !

Re: Création d'une zone en surbrillance

Publié : 24 Août 2019 13:21
par Nathrel
Bonjour !
Cette fois ci j'ai un 'autre problème :gene: . J'ai mon script qui à l'air de fonctionner (bien que le rendu ne soit pas très propre, je suis d'ailleurs toujours ouvert a d'autres astuces) j'ai voulu tester avec une capsule plate pour avoir vraiment une forme ronde, et ce même script ne fonctionne pas sur cet objet là, auriez vous une idée d'où ça peut venir?
Merci beaucoup

Re: Création d'une zone en surbrillance

Publié : 24 Août 2019 13:29
par Max
Bonjour,

tu aurais du poster ton code.
Sinon, ton objet ne change pas, tu modifies uniquement les vertices, donc le collider lui reste le même (la grille verte), et la position de ton objet ne change pas non plus (d'où le transform situé où il est sur ton screen). C'est tout a fait normal.
Là donc ton soucis est que la forme de ton mesh semble en effet bien correspondre au relief du terrain, mais la hauteur des tes vertices (composante Y) n'est pas la bonne.

Re: Création d'une zone en surbrillance

Publié : 24 Août 2019 14:13
par Nathrel
Autant pour moi, le voici !

(Si jamais tu veux copier coller)

Code : Tout sélectionner

    Mesh mesh;
    int p;
    Vector3 pos;
    Vector3[] vertices;
    Vector3 mPos;

    void Start()
    {
        
        mesh = GetComponent<MeshFilter>().mesh;
        vertices = mesh.vertices;
        p = 0;
        while (p < vertices.Length)
        {
            mPos = new Vector3(vertices[p].x, vertices[p].y, vertices[p].z); 
            mPos += transform.position + transform.lossyScale;
            Debug.Log(mPos);
            vertices[p] += new Vector3(0, Terrain.activeTerrain.SampleHeight(mPos), 0);
            Debug.Log(vertices[p]);
            p++;
        }
        mesh.vertices = vertices;
        mesh.RecalculateNormals();
        pos = transform.position; 
        pos.y = Terrain.activeTerrain.SampleHeight(transform.position);
        transform.position = pos;
    }

Re: Création d'une zone en surbrillance

Publié : 24 Août 2019 15:53
par Max
Re,

Tu ajoutes à la composante Y déjà existante la valeur de hauteur du terrain.
Alors qu'il faudrait que la composante Y soit égale à celle-ci (légèrement plus haute pour éviter le phénomène de superposition).

PS: pas de screen pour les scrips. Utilise les balises prévues (comme indique dans la FAQ, lien dans ma signature).

Re: Création d'une zone en surbrillance

Publié : 24 Août 2019 16:19
par Nathrel
Cette solution fait bien re sortir mon Transform (et le collider) du sol , mais j'ai toujours mon Mesh Renderer en l'air. Comme ceci :