[RESOLU] [MY - AL] Mouvement gameObject

Modérateurs : Administrateurs Suppléants, Community Manager

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5020
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: [MY - AL] Mouvement gameObject

Message par boubouk50 » 04 Avr 2019 10:05

Tu m'as complètement perdu...
De ce que je comprenais, seule la position Y (hauteur) est gérée par ton réseau mais le déplacement par ton clavier.
Pourtant, maintenant tu modifies tout, partout et c'est le bazar, il y a conflit. Que viennent faire pos et posZ?? Tu les stockes pour trouver la hauteur de vagues à cet endroit?
je ne comprends pas pourquoi tu ne gères que la position d'arrivée sur l'axe Z. Tu es en 1 dimension??

Tu peux ne travailler que sur certains axes sans souci. Donc dissocie les choses.
C'est un exemple:

Code : Tout sélectionner

void Update()
    {
        setInputs(Input.GetAxisRaw("Vertical"), Input.GetAxisRaw("Horizontal"));
        transform.Translate (Vector3.forward * (accel) * Time.deltaTime); //ICI ton bateau est positionné en X et Z
        MoveTanker();// Ton MoveTanker ne doit se soucier que de la position Y pas des autres
    }

Code : Tout sélectionner

void MoveTanker()
    {
            t = Network.getT();
            t += Time.deltaTime; //ajout du temps entre deux updates
            Vector3 position = Vector3.Lerp(Network.getPositionDeDepart(), Network.getPositionDArrivee(), Network.getTempsTotal());
            transform.position = New Vector3 (transform.position.x, position.y, transform.position.z); //Tu n'affectes que la position Y
    }
"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

Avatar de l’utilisateur
Armand
Messages : 50
Inscription : 10 Jan 2019 12:06
Localisation : Toulouse

Re: [MY - AL] Mouvement gameObject

Message par Armand » 04 Avr 2019 10:36

Bon je remets le sujet au clair ;)

Nous avons précédemment fait cela :

Une fonction MoveTanker() qui permet de faire une interpolation de mon bateau sur l'axe Y, ainsi que son axe de rotation Z et X (roulis et tangage).

Code : Tout sélectionner

   void MoveTanker()
    {

        t = Network.getT(); // Temps total
        t += Time.deltaTime; //Ajouts du temps entre deux updates
        tempsTotal = Network.getTempsTotal();
        transform.position = Vector3.Lerp(Network.getPositionDeDepart(), Network.getPositionDArrivee(), t / tempsTotal); // Position du bateau
        transform.eulerAngles = Vector3.Lerp(Network.getRotateDeDepart(), Network.getRotateDeFin(), t / tempsTotal); // Rotation du bateau
    }
De plus j'ai une fonction resetPos() qui elle permet de définir positionDeDepart = positionDArrivée.
De ce fait l'ancienne positionDArrivée devient la nouvelle positionDeDepart.
Je fais également la meme chose pour la rotation du bateau, ce coup-ci sur l'axe z et x.
( Z = roullis ; X = tangage).

Code : Tout sélectionner

    static void resetPos()
    {
        positionDeDepart = positionDArrivee;
        rotateDeDepart = rotateDeFin;
        positionDArrivee.y = (float)wave.h;
        rotateDeFin.z = (float)wave.roulis;
        rotateDeFin.x = (float)wave.rotate;
        t = 0F;
    }
Jusque là rien de nouveau, c'est ce qui a été fait précédemment.

Je cherche désormais a faire bouger mon bateau en avant et a reculons, donc sur l'axe Z.
Il serait donc logique d'ajouter une ligne dans ma fonction resetPos()

Code : Tout sélectionner

        positionDArrivee.z = (float)wave.z;
Malheureusement ma com réseau n'envoie pas cette donnée.
Je suis donc contraint à faire bouger le bateau uniquement avec Unity, et non à l'aide de ma com réseau comme fait jusqu’à présent.

Le souci est le suivant :
La fonction resetPos() remet donc mon Vecteur à 0 à chaque réception de socket, et force la modification de position.Y
Il va donc de soit que position.x et position.z sont également remis à 0.

EDIT : Mon bateau est en X:0 et Z:0 par défaut !

Ma solution était donc la suivante :

1- Je fais avancer mon bateau sur l'axe Z.
2- Je stock dans une variable posZ sa position.z

3- Je fais bouger mon bateau sur l'axe Y et Z:
3.1- Mouvement sur Y
3.2- Mouvement sur Z


Voici comment je m'y suis pris.

Code : Tout sélectionner

    void Update()
    {
        setInputs(Input.GetAxisRaw("Vertical"), Input.GetAxisRaw("Horizontal"));
        transform.Translate(Vector3.forward * (accel) * Time.deltaTime); // ici je fais le (1)
        pos = transform.position;
        posZ = pos.z;// ici je fais le (2)
        MoveTanker(); // Ici je fais le (3)
    }
    
-- --

Code : Tout sélectionner

    static void resetPos()
    {
       
        positionDeDepart = positionDArrivee;
        rotateDeDepart = rotateDeFin;
        positionDArrivee.y = (float)wave.h; // Ici je fais le (3.1)
        positionDArrivee.z = (float)tanker_script.posZ ; // Ici je fais le (3.2)
        rotateDeFin.z = (float)wave.roulis;
        rotateDeFin.x = (float)wave.rotate;
        t = 0F;
    }
J'espère avoir été le plus clair et compréhensible possible, et m'excuse si ca n'est pas le cas :-|

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5020
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: [MY - AL] Mouvement gameObject

Message par boubouk50 » 04 Avr 2019 14:33

Attention à ne pas confondre les repères locaux et World!!
Le vecteur transform.forward (z-local) est un vecteur local donc sur les 3 axes en World
Le vecteur Vector3.forward (z-world) est global et n'affecte la position du bateau que sur l'axe Z World donc une ligne droite.

Et j'en reviens à mon précédent message: Tu ne peux pas contrôler ton bateau à la fois depuis le réseau et depuis Unity. Tu ne peux avoir qu'un seul pilote à bord.
Donc laisse ton réseau gérer la hauteur et Unity (clavier) le déplacement ou bien gère tout depuis le réseau.
"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

Avatar de l’utilisateur
Armand
Messages : 50
Inscription : 10 Jan 2019 12:06
Localisation : Toulouse

Re: [MY - AL] Mouvement gameObject

Message par Armand » 15 Avr 2019 10:42

Je savais pas pour le coup ca, et ca change tout en effet ^^
Du coup je devrais trouver une solution, merci bien ;)

Avatar de l’utilisateur
Armand
Messages : 50
Inscription : 10 Jan 2019 12:06
Localisation : Toulouse

Re: [MY - AL] Mouvement gameObject

Message par Armand » 17 Avr 2019 10:53

Salut salut !

Je suis toujours bloqué sur le mouvement forward de mon bateau.

J'ai donc décidé de faire comme tu me l'avais conseillé, c'est à dire de passer la coordonnée X dans ma com réseau, et en meme temps que ma coordonnée Y.

J'ai donc un object qui contient une propriété x ( correspond à la coordonnée x pour faire avancer le bateau ) et y ( correspond à la hauteur du bateau ).

Le problème est que mon bateau a un effet de lag, j'ai l'impression qu'il se téléporte, et le mouvement n'est pas lisse.
Sur l'axe Y aucun souci, mais X non :/

Voici mon code :

Ici je fais bouger mon bateau d'un Vecteur à un autre dans la méthode Update() :

Code : Tout sélectionner

        t = Network.getT(); // Temps total
        t += Time.deltaTime; //Ajouts du temps entre deux updates
        tempsTotal = Network.getTempsTotal();
        transform.position = Vector3.Lerp(Network.getPositionDeDepart(), (Network.getPositionDArrivee()), t / tempsTotal);
Ici j'ai ma fonction resetPos() qui est appelée à chaque réception d'un nouveau socket:

Code : Tout sélectionner

    static void resetPos()
    {
        positionDeDepart = positionDArrivee;
        positionDArrivee.y = (float)wave.h;
        positionDArrivee.x = (float)wave.x;
        t = 0F;
    }


Merci d'avance, :-D :-D

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5020
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: [MY - AL] Mouvement gameObject

Message par boubouk50 » 17 Avr 2019 13:20

Je comprends de moins en moins ce que tu fais et j'ai un peu l'impression de ne faire que me répéter. :gene:
Tu gères le pilotage en ligne droite? Sur un seul axe x? Attention de ne pas confondre les axes locaux et globaux.
La mise en œuvre pour chaque axe est la même, si tu fais exactement pareil que pour y, tu auras un résultat similaire. Si tu n'as pas ce résultat cela pourrait provenir des données envoyées.
"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

Avatar de l’utilisateur
Armand
Messages : 50
Inscription : 10 Jan 2019 12:06
Localisation : Toulouse

Re: [MY - AL] Mouvement gameObject

Message par Armand » 17 Avr 2019 16:15

Pour le moment ce qui fonctionne c'est :

Positionnement :
Axe X : KO
Axe Z : KO
Axe y : OK

Rotation :
Axe X : OK
Axe Z : OK
Axe y : OK

Donc la rotation ca c'est ok ! Mais pour le positionnement, je n'arrive qu'a le faire varier sa hauteur.
Le mouvement sur X lui fonctionne mais a un effet de lag ( comme si je voyais les différents points d'interpolation )

Est-ce que ca pourrait venir du fait qu'il fait bouger le bateau sur Y et X en même temps ??

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5020
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: [MY - AL] Mouvement gameObject

Message par boubouk50 » 17 Avr 2019 16:44

Armand a écrit :
17 Avr 2019 16:15
Est-ce que ca pourrait venir du fait qu'il fait bouger le bateau sur Y et X en même temps ??
Non, les données sont séparées, même si elles sont contenues dans le même vecteur. les valeurs de > sont interpolées entre elles, idem pour les valeurs de Y.

Est-ce possible d'avoir un retour visuel, une capture vidéo du lag, stp?
N'as-tu pas un bout de code qui pourrait affecter la position ailleurs?
"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

Avatar de l’utilisateur
Armand
Messages : 50
Inscription : 10 Jan 2019 12:06
Localisation : Toulouse

Re: [MY - AL] Mouvement gameObject

Message par Armand » 18 Avr 2019 11:11

Salut !
Solution trouvée ! Lorsque j'envoyais les données via un script sous Unity, aucun lag
Et lorsque j'envoyais les données via mon programme de calcul, alors la il y avait des lag.

la raison est que mon logiciel de calcul envoie une requête toutes les 240 ms, et non pas en permanence comme mon script sous Unity, d'où cet effet de lag !

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5020
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: [RESOLU] [MY - AL] Mouvement gameObject

Message par boubouk50 » 19 Avr 2019 18:06

:super:
"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 « Scripting Javascript, C# et Boo »