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 :

besoin d'aide pour la méthode lerp.


Sujet :

Unity

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2017
    Messages : 24
    Points : 8
    Points
    8
    Par défaut besoin d'aide pour la méthode lerp.
    bonjour . je suis débutant en programation . j'éssaie en ce moment de developper un petit jeu avec unity 3d .
    j'aimerais déplacer un objet avec un click comme dans le jeu de dame où la piece se déplace vers la case indiqué .
    j'ai essayé avec la methode lerp mais elle fonctionne que dans la fonction update. et je ne sais pas comment l'utiliser en dehors .
    et merci à vous.

  2. #2
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Bonjour, j'imagine que c'est la méthode Vector3.Lerp qui est utilisée.
    Cette méthode ne dépend aucunement de la méthode MonoBehaviour.Update

    "En dehors" n'est pas vraiment explicite. Si c'est pour avoir une méthode "indépendante" on peut utiliser une coroutine:
    (j'ai simplifié, il faudrait une variable IEnumerator pour check si une coroutine n'est pas déjà lancée, etc...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public class Peon : MonoBehaviour
    { 
        public void Move(Vector3 targetPosition)
        {
            StartCoroutine(Move(targetPosition, 0.01f));
        }
     
        private IEnumerator Move(Vector3 targetPosition, float speed)
        {
            while((targetPosition - transform.position).magnitude > 0.1f)  // Le 0.01f sera la limite de précision
            {
                transform.position = Vector3.Lerp(transform.position, targetPosition, speed);
                yield return new WaitForFixedUpdate(); // Le FixedUpdate permet de s'assurer d'un mouvement omogène
            }
            transform.position = targetPosition;
        }
    }
    Après, y'a plein de solutions possibles, tout dépend de ce qui est recherché.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2017
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    merci à vous PilloBuenaGente .
    je vais essayer cette methode pour voir .
    en fait je suis entrain de créer un petit jeu de dame . et le but c'est de déplacer la pièce à la case voulu . c'est tout.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Je pense que vous devriez mettre en place une machine à état. Tant que vous êtes dans l'état de déplacement, vous faites le LERP (dans la fonction Update()). Lorsque vous n'êtes pas dans l'état de déplacement, alors vous redonnez la main au joueur.
    Sinon, vous pouvez aussi vous inspirer de ce tutoriel : http://unity.developpez.com/videos/r...-deplacements/
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre habitué Avatar de EliXirr
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 62
    Points : 176
    Points
    176
    Par défaut
    pour les StateMachine j'utilise StateKit de Prime31. Je l'utilise quasiment tous les jours (que le dieu machine fait) et il marche nikel.

    https://github.com/prime31/StateKit

    En esperant que ça puisse aider.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2017
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    elixirr , littlewhite merci à vous j'avous que je n'ai jamais essayé cette methode mais je vais regarder le tuto pour voir si ca va m'aider.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2017
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    ce que je veux au juste :
    dans le jeu de dame quand je clique sur une pièce des cases vide me sont proposées , là on dois choisir entre ces case où déplacer la pièce , alors quand je clique sur la case vide parmi les case proposées la pièce doit se déplacer vers cette case .

  8. #8
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    (Introduire le StateMachine n'irait pas au delà des problématiques rencontrées?!)

    -clique sur une pièce
    -Proposer les cases
    -clique sur une cases
    -Déplacer la pièce

    Quelles étapes vous pose problème ?
    Quels sont ces problèmes ? (si on peut avoir le code correspondant pour mieux comprendre)

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2017
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    quand je clique sur la case vide voulu . je veux que la pièce se déplace d'une façon progressive vers cette case .

    ici je récupère la pièce à déplacer en cliquant sur la case vide:


    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
                foreach (GameObject i in pieces)
                {
                    if (i.tag.Equals("moving"))
                    {
     
     
                        i.transform.position = transform.position;
                        i.tag = transform.GetComponent<Text>().text;
     
                    }
     
                    if (i.tag.Equals("destroyed"))
                    {
                        i.SetActive(false);
                    }
                }




    puis je la déplace . seulement le déplacement se fait directement comme une téléportation et pas de façon progressive.

  10. #10
    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
    Citation Envoyé par PilloBuenaGente Voir le message
    (Introduire le StateMachine n'irait pas au delà des problématiques rencontrées?!)
    Non parce qu'une state machine c'est exactement ce qu'il faut faire dans ce cas.
    Citation Envoyé par PilloBuenaGente Voir le message
    -clique sur une pièce
    -Proposer les cases
    -clique sur une cases
    Pas de problème jusque là, toutes ces actions sont instantannées.
    Citation Envoyé par PilloBuenaGente Voir le message
    -Déplacer la pièce
    Si l'on veut un truc un minimum sympa, le déplacement n'est pas instantanné, on déplace la pièce, on la téléporte pas.

    Et c'est là que la state machine intervient. Et que l'utilisation de la méthode update est nécessaire.

    Btw, dire que tu "déplaces avec la méthode lerp" ça a autant de sens que de dire "je déplace avec une addition" : aucun.
    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.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2017
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    alors je dois apprendre ce que c'est le stat machine .

  12. #12
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Non parce qu'une state machine c'est exactement ce qu'il faut faire dans ce cas.
    Pour moi le fait de déplacer un objet ne nécessite forcement pas de "StateMachine".

    Citation Envoyé par Bousk Voir le message
    Pas de problème jusque là, toutes ces actions sont instantannées.
    Ou non, il faut savoir si les déplacements auront un impact sur le gameplay, ou si c'est juste de l'affichage. (pour un jeu de dame, ça m'étonnerais)
    (On peut s'imaginer que lorsque qu'on sélectionne la pièce, il y ai une animation de la camera qui avance sur celle-ci, puis la possibilité de sélectionner la case)

    Citation Envoyé par Bousk Voir le message
    Si l'on veut un truc un minimum sympa, le déplacement n'est pas instantanné, on déplace la pièce, on la téléporte pas.
    Le plus simple il me semble est quand même de s'abstraire de l'affichage; Aminesquall nous dit bien qu'il débute en programmation.
    Pour la petite transition ce n'est qu'une simple Vector3 targetPosition qui est rapprochée via l'update

    Au final j’essaie juste de comprendre ce qui bloque Aminesquall dans son expérimentation.
    Pour ce qui est de la question, tu pourrais avoir un petit script (pas testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class MoveToTarget : MonoBehaviour
    {
        public Vector3 target;
        public float speed = 1f;
     
        private void MoveTo(Vector3 target) { this.target = target; }
        private void Update() { transform.position = Vector3.Lerp(transform.position, target, speed * Time.deltaTime); }
    }
    On aura un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if (i.tag.Equals("moving"))
    {
     
     
    i.transform.position = transform.position;
    i.tag = transform.GetComponent<Text>().text;
    i.GetComponent<MoveToTarget>().MoveTo(targetPosition);//Ici on donne la position que doit prendre la pièce
     
    }
    Citation Envoyé par Bousk Voir le message
    Btw, dire que tu "déplaces avec la méthode lerp" ça a autant de sens que de dire "je déplace avec une addition" : aucun.
    Et je me déplace avec mes jambes, ça a un sens pour toi ?

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2017
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    PilloBuenaGente , pour cette méthode que tu m'as donné en premier :

    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public class Peon : MonoBehaviour
    { 
        public void Move(Vector3 targetPosition)
        {
            StartCoroutine(Move(targetPosition, 0.01f));
        }
     
        private IEnumerator Move(Vector3 targetPosition, float speed)
        {
            while((targetPosition - transform.position).magnitude > 0.1f)  // Le 0.01f sera la limite de précision
            {
                transform.position = Vector3.Lerp(transform.position, targetPosition, speed);
                yield return new WaitForFixedUpdate(); // Le FixedUpdate permet de s'assurer d'un mouvement omogène
            }
            transform.position = targetPosition;
        }
    }




    ca marche mais seulement s'il y'avait qu'une seule possibilité où déplacer la pièce , lorsqu'on clique sur la pièce elle se déplace a une case déjè connu .
    alors qu'il faut d'abord selectionner la case vide avant de déplacer la pièce .

    désolé pour toutes ces questions mes amis mais je suis vraiment débutant .

  14. #14
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par aminesquall Voir le message
    ca marche mais seulement s'il y'avait qu'une seule possibilité où déplacer la pièce , lorsqu'on clique sur la pièce elle se déplace a une case déjè connu .
    alors qu'il faut d'abord selectionner la case vide avant de déplacer la pièce .
    Cet exemple servait à répondre à la question du post.

    A quel moment ça pose problème ?
    -Sélectionner une pièce (récupérer un clic sur le Collider d'une des pièces du plateau)
    Faire apparaitre les cases sélectionnables (instancier des GameObject avec un Collider pour définir, selon les rêgles, les cases sélectionnable)
    -Sélectionner un élément sélectionnable(récupérer un clic le Collider d'un élément sélectionnable)
    Déplacer la pièce sur cet élément sélectionnable (Lancer le déplacement de la pièce vers la position de la case sélectionnable, Détruire les éléments sélectionnables)
    -Recommencer

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2017
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    tout se passe bien .
    quand on clique sur la pièce , des cases vides qui peuvent accepter le déplacement de la pièce sont allumés . là , on doit choisir la case vide pour déplacer la pièce séléctionnée au debut . et pour faire j'utilise ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i.transform.position = transform.position;
    et la pièce est déplacée à la case voulue .

    le seul problème que j'ai c'est que la pièce se déplace comme teleportation et pas de façon progrssive.
    je veux que la pièce se déplace en suivant une ligne progressivement .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void Move(Vector3 piecePos)
        {
            StartCoroutine(Move(piecePos, 0.01f));
        }
     
        private IEnumerator Move(Vector3 piecePos, float speed)
        {
            while ((transform.position - piecePos).magnitude > 0.1f)  // Le 0.01f sera la limite de précision
            {
                piecePos = Vector3.Lerp(piecePos, transform.position, speed);
                yield return new WaitForFixedUpdate(); // Le FixedUpdate permet de s'assurer d'un mouvement omogène
            }
            piecePos = transform.position;
        }


    j'ai essayé cette methode en donnant en parametre la position de la pièce à déplacer mais ca ne marche pas

  16. #16
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Le plus simple est que tu colles ce script sur le GameObject de ta pièce (celui-ci se déplacera continuellement vers sa targetPosition)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class MoveToTarget : MonoBehaviour
    {
        public Vector3 targetPosition;
        public float speed = 1f;
        private void Update() { transform.position = Vector3.Lerp(transform.position, targetPosition, speed * Time.deltaTime); }
    }
    Du coup au lieu de faire i.transform.position = transform.position;, tu fais i.GetComponent<MoveToTarget>.targetPosition = transform.position;

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2017
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    merci PilloBuenaGente .
    ça marche . mais il y'a toujours un probleme . la pièce à laquele j'ai collé le script se déplace au début au centre .

  18. #18
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Oui car "celui-ci se déplacera continuellement vers sa targetPosition". Il faut donc qu'au lancement, on mette l'actuelle position en targetPosition : void Start() { targetPosition = transform.position; }

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2017
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    ah oui d'accord et merci beaucoup mon ami .

  20. #20
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2017
    Messages : 24
    Points : 8
    Points
    8
    Par défaut
    c'zst bizard même si je change le speed la vitesse de déplacement ne change pas .

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38
  2. besoin d'aide pour le composant DBComboBox
    Par jane2002 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/02/2004, 19h01
  3. [Kylix] besoin d'aide pour installer kylix3
    Par Sph@x dans le forum EDI
    Réponses: 3
    Dernier message: 11/02/2004, 13h53
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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