Page 1 sur 1

[Abandonné][DB-AL] Positionner objet sur curseur

Publié : 02 Août 2019 16:08
par EmileF
Bonjour,

J'ai conscience que ce sujet a été traité plusieurs fois, j'ai même vu un post sur ce sujet datant de 2010, mais sans obtenir de réponse.

Dans mon jeu, j'ai un inventaire sous forme de UI, dans lequel il y a des items représentant des objets.
Je voudrai, en cliquant sur un item, l'objet en question, vienne se placer à la place du curseur de façon à ce que je puisse le drag&drop où je le souhaite.

Je n'arrive pas à positionner mon objet à la place de mon curseur.

est-ce que quelqu'un peut m'aider svp...

Re: [DB-AL] Positionner objet sur curseur

Publié : 02 Août 2019 16:33
par boubouk50
Salut Emile,

La documentation: https://docs.unity3d.com/ScriptReferenc ... ition.html
Il te renvoie la position du curseur dans le repère de l'écran: 0,0 en bas a gauche, X,Y en haut à droite, avec X la largeur et Y la hauteur en pixel de l'affichage. (Screen.width et Screen.height)

Pour la suite, il faut savoir comment est géré ton canvas: résolution, repère (screenSpace, width related, constant) pour calculer la bonne position.

je suis tombé sur ce tuto qui fait le taff: https://www.youtube.com/watch?v=fhBJWTO09Lw

Re: [DB-AL] Positionner objet sur curseur

Publié : 02 Août 2019 17:00
par EmileF
Merci Boubouk,

Ton premier lien me donne comme script:

Code : Tout sélectionner

    void Update ()
    {
        if ( Input.GetButtonDown ("Fire1"))
        {
            Ray ray = Camera.main.ScreenPointToRay ( Input.mousePosition );
            if ( Physics.Raycast (ray))
                Instancier (particule, transform.position, transform.rotation);
        }
    }
    
Je ne vois pas comment récupérer la position du curseur pour placer mon objet.

Dans la vidéo, qui est très bien, il fait déplacer l'item, c'est pas ce que je souhaite
Ce que je voudrais c'est créer l' objet 3D, correspondant à l'item sur lequel je clique, le positionner à l'emplacement du curseur pour pouvoir le déplacer ensuite ou je souhaite.
Et je n'arrive pas à positionner l'objet 3D à l'emplacement du curseur

Si j'utilise:

Code : Tout sélectionner

transform.position = Camera.ScreenToWorldPoint(Input.mousePosition);
il me positionne l'objet pile sur la caméra...

Re: [DB-AL] Positionner objet sur curseur

Publié : 02 Août 2019 17:21
par boubouk50
Pour la doc, ce n'est que pour te la donner.
Pour le contexte, tu parlais d'élément d'UI, mais si c'est un objet 3D, c'est différent effectivement.
Il faut transformer la position du curseur (2D écran) en coordonnées monde (World). Heureusement, Unity le fait pour toi avec les fonctions WorldToScreenPoint ou bien l'inverse ScreenToViewportPoint

Un tuto: https://www.youtube.com/watch?v=0yHBDZHLRbQ

Re: [DB-AL] Positionner objet sur curseur

Publié : 02 Août 2019 17:39
par EmileF
Oui bon Boubouk, merci beaucoup, mais le drag and drop, je sais le faire.

Ce que je n'arrive pas à faire c'est positionner mon objet à l'emplacement de ma souris.

Exemple, mon objet n'existe pas.
Je clique sur l'item
Je crée l'objet, à l'emplacement de la souris
et je le déplace.

C'est ce "à l'emplacement de la souris" que je n'arrive pas à faire.

Et comme je te disais précédement le :

Code : Tout sélectionner

transform.position = Camera.ScreenToWorldPoint(Input.mousePosition);
me place l'objet sur la caméra.

Je crois comprendre un peu pourquoi, je clique sur un UI qui à mon avis doit être à l'emplacement de la caméra.

J'ai essayé de modifier la valeur z de la position, mais rien de concluant

Re: [DB-AL] Positionner objet sur curseur

Publié : 02 Août 2019 18:02
par EmileF
Merci pour tout,

mais je réalise que ça parait très compliqué, pour ce que je veux faire, surtout qu'ensuite il va me falloir gérer la profondeur pour le drag.

Je vais abandonner cette idée, qui n'est pas indispensable pour mon jeu, et utiliser une méthode plus facile à gérer.

En tout cas merci Boubouk, je sais maintenant déplacer des UI, ça peut servir.

Je vais mettre mon sujet à Abandonne au lieu de résolu pour ne pas mal influencer les autres

Re: [Abandonné][DB-AL] Positionner objet sur curseur

Publié : 05 Août 2019 09:53
par boubouk50
Dommage.
Le Drag 'n Drop utilise justement le placement sous la souris, si tu sais le faire, je ne comprends pas pourquoi tu ne peux pas positionner un élément 3D sous ta souris. La dernière vidéo montre clairement l'idée de positionnement en fonction de la souris. Ou alors, je n'ai pas bien compris la demande.

Code : Tout sélectionner

float distance = 10f;
Vector3 mousePos = new Vector3 (Input.mousePosition.x, Input.mousePosition.y, distance);
transform.position = Camera.main.ScreenToWorldPoint(mousePos);
Normalement, ce code place ton objet sous la souris à une distance de 10 unités.

Re: [Abandonné][DB-AL] Positionner objet sur curseur

Publié : 05 Août 2019 10:42
par EmileF
Merci Boubouk,

Oui effectivement, c'est ce que j'avais fait, mais avec une distance moins grande, aux alentour de 1 si je me souviens bien,
mais j'ai du faire une erreur quelque part car j'avais mon objet sur le coté et pas en face.

En tout cas, merci

Mais comme je disais, j'ai utilisé une autre méthode, qui me convient tout autant, je positionne mon objet à sa position de destination et je le fais apparaître progressivement, avec le Drag n'Drop, j'aurais eu aussi un soucis de profondeur,

Re: [Abandonné][DB-AL] Positionner objet sur curseur

Publié : 05 Août 2019 10:46
par boubouk50
Pour positionner un objet à une distance indéfinie, tu peux utiliser un Raycast pour déterminer un point de collision avec les éléments et utiliser ce point pour positionner le gameObject à la bonne distance.
Enfin, bon, voilà sache que les possibilités sont là, il faut réfléchir un peu à l'algorithme derrière.