IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Unity Discussion :

Déplacement vers Cible en restant sur la route.


Sujet :

Unity

  1. #1
    Membre à l'essai
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Février 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Février 2019
    Messages : 26
    Points : 18
    Points
    18
    Par défaut Déplacement vers Cible en restant sur la route.
    Salut,

    je rencontre difficulté sur un déplacement vers une cible.
    En effet, mon CubeA doit coller a la piste et prendre direction de la cible juste pour tourner a droite ou a gauche (comme si il y avait une IA avec des Waypoints)
    Je précise que la piste aura quelques inclinaisons voir looping.
    Je n'arrive pas lui dire de juste récupérer la direction pour le faire allez a droite ou à gauche en fonction de sa cible tout en restant au sol.
    J'ai tenté avec des Waypoints et même problème il récupère toutes les directions, décolle du sol ou se met a trembler si je lui mets une gravité plus forte.

    J'ai pensé peut-être stocker dans une variable la position Y de la Cible pour lui dire de la rejoindre avec un certain lissage, mais la je sais pas trop comment faire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        public Transform Cible;
     
        void Update()
        {
            Vector3 TargetDirection = Cible.position - transform.position;
            TargetDirection.y = 0;
            Vector3 NewDirection = Vector3.RotateTowards(transform.forward, TargetDirection, 3 * Time.deltaTime, 0);
            transform.rotation = Quaternion.LookRotation(NewDirection);
            transform.position = Vector3.Lerp(transform.position, Cible.position, 0.1f);
        }
    Merci de votre aide.

  2. #2
    Membre expérimenté Avatar de Tonton Nico
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2017
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 398
    Points : 1 320
    Points
    1 320
    Par défaut
    Salut Jeje66,

    J'ai pas une grande expérience mais sait-on jamais cela t'aidera peut être à avoir un déclic

    Citation Envoyé par Jeje66 Voir le message
    J'ai tenté avec des Waypoints et même problème il récupère toutes les directions, décolle du sol ou se met a trembler si je lui mets une gravité plus forte.
    Tu parles de gravité alors que tu joues avec un transform.position. Si tu as un cube avec de la gravité et un rigibbody, passes plutôt par des non? après il y a toujours une histoire de Mass, gravité et vecteur force pour rester sur la piste pendant le looping (à voir si tu peux que le joueur aussi puisse rater un looping et "retomber" s'il arrête d'accélérer)
    Tu peux aussi enlever la gravité mais bon j'imagine qu'avoir la gravité te servait genre dessi tu as des "sauts" ou autre

    Une solution peut être possible sinon c'est un raycast pour trouver ou se trouve la piste sous toi et de modifier en conséquence juste ta position en hauteur (en étant du coup un children pour avoir le même repère mais j'avoue ne pas savoir si ça va bien réagir ^^)

    Citation Envoyé par Jeje66 Voir le message
    J'ai pensé peut-être stocker dans une variable la position Y de la Cible pour lui dire de la rejoindre avec un certain lissage, mais la je sais pas trop comment faire
    Le Lerp est une bonne façon pour lisser en effet mais selon le cas cela peut ne pas donner l'effet espéré ^^

    A voir aussi comment ton cube suit ta cible dans ton jeu mais dans ce cas un lerp peut avoir des effets désastreux déjà sur une surface plane mais avec des virages.
    Par exemple si ton cube est au début du virage et ta cible après, il ne faut pas que ton cube coupe dans le décors pour rejoindre ta cible

    Et surtout pour moi tu as besoin qu'a un moment ton cube trouve sa cible, c'est le cas? il ne fait pas que suivre mais rattrape non?
    Je n'ai aucune idée comment un système d'une telle sorte fonctionne bien en mode pro mais de mon coté j'irais vers 2 choses:
    - Soit j’entoure ma piste de limite et je fais des raycast sur les cotés du cube pour vérifier que celui ci reste dans le clamp ce qui permettra à ton cube de prendre les virages à la corde.
    - Soit d'une autre façon je fais par exemple une ligne virtuelle au milieu de la route (ou via les raycasts pour trouver le milieu) et je m'assure que mon cube colle à cette position pour rester centrer sur la route jusqu'au moment ou par exemple la distance entre mon cube et ma cible devient inférieur à 1 mètres et la via le lerp le cube rejoins sa cible


    Si jamais cela peut t'aider

    TontonNico
    TontonNico

    On me dit souvent que je ressemble à Einstein... mais plutôt à Frank que Albert

  3. #3
    Membre à l'essai
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Février 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Février 2019
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Merci Tonton Nico.

    l'addforce ça n'a pas fonctionné ou je l'ai mal exploité.
    Le Rigidbody.Velocity donne un meilleur résultat sur du plat tant que l'on incline pas c'est jouable.
    Le Raycast pour s'aligner au sol pas mal aussi même si je le trouve un peu complexe pour mon niveau.
    j'ai désactivé la gravité pour tester.

    Dès que l'on part en inclinaison il ne s'aligne plus c'est fou Si je mets Ciblage a false il s'aligne de nouveau.

    j'ai testé la position de la cible pour la comparer à mon CubeA, compliqué aussi puisque la cible je cherche X et je dois diriger Y en rotate mon CubeA.
    J'ai mis un Raycast pour le détecter.

    J'ai pas testé sur l'incliné encore, mais je suis pas sur que je vais garder cette méthode.

    Si vous avez d'autre soluce, car là je vois pas comment il procède.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Février 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Février 2019
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Nom : Capture.PNG
Affichages : 337
Taille : 668,8 Ko

    L'image parle d'elle même, comment puis-je calculer SVP la rotation a faire pour arriver à ma cible (Cube blanc) ?

  5. #5
    Membre expérimenté Avatar de Tonton Nico
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2017
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 398
    Points : 1 320
    Points
    1 320
    Par défaut
    hmm une rotation? pour que l'avant de ton cube suive la cible tu veux dire? genre une balle/missile dont la tête doit pointer sur la cible?

    Le code de base pour une chose de la sorte, sur le cube donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    public Transform cible; //ta cible blanche donc
    public Float Vitesse;
     
    Void update(){
     
    Vector3 direction = cible.position - transform.position;
     
    transform.Translate(direction.normalized*Vitesse*Time.deltatime,Space.World); //comme vu ensemble du coup ici on va directement rejoindre la cible sans prendre en compte la forme de ta piste ou d'autres restrictions
    transform.LookAt(cible); //tout est géré par unity en une ligne, ton cube va automatiquement faire une rotation pour être aligné sur ta cible 
     
    }
    TontonNico
    TontonNico

    On me dit souvent que je ressemble à Einstein... mais plutôt à Frank que Albert

  6. #6
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Citation Envoyé par Jeje66 Voir le message
    L'image parle d'elle même, comment puis-je calculer SVP la rotation a faire pour arriver à ma cible (Cube blanc) ?
    Ne pas dormir pendant les cours de trigo au collège ?

    Du coup tu peux utiliser la tangente parce que tan = opposé/adjacent
    Et si on prend ton image (x en abscisse et y en ordonné ) alors :
    ben opposé = abs(moi.x-cube.x) , adjacent = abs(moi.y-cube.y)

    Je ne pensais pas que j'aurais besoin de donné des cours de collège ici

  7. #7
    Membre à l'essai
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Février 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Février 2019
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Merci a vous deux,

    public Transform cible; //ta cible blanche donc
    public Float Vitesse;

    Void update(){

    Vector3 direction = cible.position - transform.position;

    transform.Translate(direction.normalized*Vitesse*Time.deltatime,Space.World); //comme vu ensemble du coup ici on va directement rejoindre la cible sans prendre en compte la forme de ta piste ou d'autres restrictions
    transform.LookAt(cible); //tout est géré par unity en une ligne, ton cube va automatiquement faire une rotation pour être aligné sur ta cible

    }
    Je l'ai déja Testé Tonton Nico il ne suis pas la route. c'est incroyable que ce soit s'y prise de tête juste pour le faire tourner vers la cible.

    Kannagi, j’apprécie t'on aide, mais même si la tangente est bien loin derrière moi, je ne sais même pas comment adapter tes éléments au script.

  8. #8
    Membre expérimenté Avatar de Tonton Nico
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2017
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 398
    Points : 1 320
    Points
    1 320
    Par défaut
    Ton problème n'est pas de le tourner vers la cible mais de respecté la courbure de la route ^^
    TontonNico

    On me dit souvent que je ressemble à Einstein... mais plutôt à Frank que Albert

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Février 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Février 2019
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Vector3.RotateTowards ?
    Même résultat il fixe le cube sur tout les axes, alors que je veux juste qu'il tourne a gauche ou a droite (Axe Y sur le Player).

    Ton problème n'est pas de le tourner vers la cible mais de respecté la courbure de la route ^^
    Oui tout a fait, j'ai un Raycast qui s'en occupe, mais le ciblage remplace le déplacement.

  11. #11
    Membre expérimenté Avatar de Tonton Nico
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2017
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 398
    Points : 1 320
    Points
    1 320
    Par défaut
    Je n'ai jamais utilisé mais un nav mesh ne ferais pas l'affaire?

    TontonNico
    TontonNico

    On me dit souvent que je ressemble à Einstein... mais plutôt à Frank que Albert

  12. #12
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 97
    Points : 247
    Points
    247
    Par défaut
    Citation Envoyé par Jeje66 Voir le message
    Même résultat il fixe le cube sur tout les axes, alors que je veux juste qu'il tourne a gauche ou a droite (Axe Y sur le Player).
    Si il possède un rigidbody, je crois que tu peux appliqué des contraintes comme bloqué la rotation, le scale, sur certaine axe.

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Si tu veux faire de la 2D, pourquoi utiliser un Vector3 et non un Vector2 ?
    Ensuite tu peux utiliser un simple Lerp ou SmoothDamp.
    Rien ne t'interdit non plus de forcer une composante du Vector3 après utilisation de RotateTowards.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Février 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Février 2019
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Le nav mesh fonctionne mal sur de l'incliné.
    Les rotations sont bloquées sur le rigidbody. C'est un Raycasts qui aligne le player au sol.
    Je suis en 3d j'utilise plutôt le lerp comment forcer une composante ?

  15. #15
    Membre expérimenté Avatar de Tonton Nico
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2017
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 398
    Points : 1 320
    Points
    1 320
    Par défaut
    Comment ça tu forces? tu l'as fait déjà dans ton exemple de script dans ton premier post je dirais :

    TontonNico

    On me dit souvent que je ressemble à Einstein... mais plutôt à Frank que Albert

  16. #16
    Membre à l'essai
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Février 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Février 2019
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    oui TargetDirection.y = 0; fonctionne sur du plat et sur tremplin mais dès que la piste curve a gauche ou droite le player ne s'aligne plus sur le sol ou il reste droit.

  17. #17
    Membre expérimenté Avatar de Tonton Nico
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2017
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 398
    Points : 1 320
    Points
    1 320
    Par défaut
    Citation Envoyé par Jeje66 Voir le message
    Oui tout a fait, j'ai un Raycast qui s'en occupe, mais le ciblage remplace le déplacement.
    si avec le raycast tu trouves la route, tu remontes sa position, tu ajoutes l'offset que tu veux et à chaque instant ton cube lévitera à ton offset ou que soit ta route non?

    Edit: et attention tu parlais aussi de droite/gauche, c'est plus le sol qui t'intéresse la ^^
    TontonNico

    On me dit souvent que je ressemble à Einstein... mais plutôt à Frank que Albert

  18. #18
    Membre à l'essai
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Février 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Février 2019
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Tonton Nico tu m'as perdu là ou je m'y suis perdu tout seul

    Il faudrait que je fasse une capture d’écran pour vous montrer.

Discussions similaires

  1. Réponses: 19
    Dernier message: 01/02/2007, 12h58
  2. comment transmettre les données en restant sur la même page.
    Par jack_1981 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/04/2006, 17h29
  3. espace restant sur un dd?
    Par fredo2009 dans le forum Langage
    Réponses: 2
    Dernier message: 24/01/2006, 11h12
  4. Afficher le "temps restant" sur une longue action
    Par illuzmax dans le forum Langage
    Réponses: 2
    Dernier message: 04/07/2005, 10h23
  5. Réponses: 2
    Dernier message: 15/06/2005, 18h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo