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

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

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

Message par EmileF » 02 Août 2019 16:08

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...
Dernière édition par EmileF le 02 Août 2019 18:02, é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 : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] Positionner objet sur curseur

Message par boubouk50 » 02 Août 2019 16:33

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
"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] Positionner objet sur curseur

Message par EmileF » 02 Août 2019 17:00

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...
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

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

Re: [DB-AL] Positionner objet sur curseur

Message par boubouk50 » 02 Août 2019 17:21

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
"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] Positionner objet sur curseur

Message par EmileF » 02 Août 2019 17:39

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
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

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

Re: [DB-AL] Positionner objet sur curseur

Message par EmileF » 02 Août 2019 18:02

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
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

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

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

Message par boubouk50 » 05 Août 2019 09:53

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.
"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: [Abandonné][DB-AL] Positionner objet sur curseur

Message par EmileF » 05 Août 2019 10:42

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,
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

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

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

Message par boubouk50 » 05 Août 2019 10:46

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.
"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

Répondre

Revenir vers « (C#) CSharp »