[RESOLU] [MY - AL] Mouvement gameObject

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
Armand
Messages : 50
Inscription : 10 Jan 2019 12:06
Localisation : Toulouse

Re: [MY - AL] Mouvement gameObject

Message par Armand » 21 Mars 2019 12:22

Ok donc la réinitialisation doit se faire avant chaque reception de données.

Après j'apelle Update qui lui va faire bouger le bateau ?

Voila comment je vois le fonctionnement

Image


Il me semble donc que mes Vecteurs positionDeDepart et positionDArrivee, ainsi que t soient accesible dans ma fonction Update() et aussi dans ma fonction de reception de données.

Qu'entends tu par récupérer les données ou recevoir ?

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

Re: [MY - AL] Mouvement gameObject

Message par boubouk50 » 21 Mars 2019 13:07

Je réponds vite a ta question (je bouge en pause déjeuner)

Récupérer: ton code récupère les données au moment où il le souhaite (via un appel à fonction ou autre). Tu gères donc le timing depuis le code.
Recevoir: les données sont envoyées au socket et peuvent arriver à n'importe quel moment. Tu ne gères donc pas le timing depuis le code.
"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 » 21 Mars 2019 14:36

Ok, les données sont donc reçues, elles sont envoyées par socket et peuvent arriver à n'importe quel moment.
Le diagramme ci-dessus correspond il au même raisonnement que le tien.

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

Re: [MY - AL] Mouvement gameObject

Message par boubouk50 » 21 Mars 2019 14:46

Image

L'Update () est en soi indépendant. Il a juste accès aux mêmes données que le Reset + Réception
"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 » 21 Mars 2019 15:31

Bon du coup pour accéder a mes variables positionDeDepart, positionDArrivee, t dans mes 2 threads, j'ai utilisé des getter/setter.

Voici la classe Network qui gère la réception des données par socket qui donc les reset après chaque nouvelle reception.

Code : Tout sélectionner

public class Network : MonoBehaviour
{
    static Vector3 positionDeDepart;
    static Vector3 positionDArrivee;
    public static float t = 0F;
    static float tempsTotal = 
    
    public static Vector3 getPositionDArrivee() {return positionDArrivee;}
    public static Vector3 getPositionDeDepart() {return positionDeDepart;}
    public static float getT() {return t;}
    public static float getTempsTotal() {return tempsTotal;}
    
        public static void ReceiveDataCustom()
    {
    	client = new UdpClient(port);
        while (true)
        {
            try
            {
                IPEndPoint anyIP = new IPEndPoint(IPAddress.Broadcast, port);
                print("Listening on " + port + " port ... ");
                data = client.Receive(ref anyIP);
                int size = data.Length;
                IntPtr ptr = Marshal.AllocHGlobal(size);
                Marshal.Copy(data, 0, ptr, size);
                wave = (waves)Marshal.PtrToStructure(ptr, typeof(waves));
                Marshal.FreeHGlobal(ptr);
                //Je reset les pos après la reception de la nouvelle donnée.
                resetPos();

            }
            catch (Exception err)
            {
                print(err.ToString());
            }
        }
    } 
}
Maintenant voici ma fonction Update() & MoveTanker()

Code : Tout sélectionner

void Update()
    {
        MoveTanker();
    
    void MoveTanker()
    {
            print("CURRENT POS: " + transform.position.y);
            t = Network.getT();
            print("FUTUR POS: " + Network.getPositionDArrivee());
            t += Time.deltaTime; //ajout du temps entre deux updates
            transform.position = Vector3.Lerp(Network.getPositionDeDepart(), Network.getPositionDArrivee(), Network.getTempsTotal());
            print("NEW POS: " + transform.position.y);
    }
Voici le résultat donné :

Image

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

Re: [MY - AL] Mouvement gameObject

Message par boubouk50 » 21 Mars 2019 15:43

On va finir par y arriver :geek:
On est pas loin. Je n'ai pas la fonction ResetPos ().
Attention l'interpolant vaut t/tempsTotal

EDIT - Bizarre. Les variables PositionDeDepart et positionDArrivee changent à chaque Update (). Or si tu reçois des données toutes les 60ms (soit 16fps) et que l'Update () est d'au moins 33ms (soit 30fps), elles ne devraient pas varier à chaque Update ()
"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 » 21 Mars 2019 15:50

Fonction resetPos() :

Code : Tout sélectionner

    static void resetPos()
    {
        positionDeDepart = positionDArrivee;
        positionDArrivee.y = (float)wave.h;
        t = 0F;
        tempsTotal = 0.06F/* code à venir */;
        print("RESET DONE");
    }
Erreur de ma part que j'ai modifée mais pas actualiser sur le screen ^^

Code : Tout sélectionner

        transform.position = Vector3.Lerp(Network.getPositionDeDepart(), Network.getPositionDArrivee(), t / Network.getTempsTotal());
Je pars du principe pour le moment, que le tempsTotal est de 60ms, je vais m'assurer maintenant que mon programme de calcul envoie bien une donnée toutes les 60ms

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

Re: [MY - AL] Mouvement gameObject

Message par Armand » 21 Mars 2019 15:53

boubouk50 a écrit :
21 Mars 2019 15:43
EDIT - Bizarre. Les variables PositionDeDepart et positionDArrivee changent à chaque Update (). Or si tu reçois des données toutes les 60ms (soit 16fps) et que l'Update () est d'au moins 33ms (soit 30fps), elles ne devraient pas varier à chaque Update ()
Je pense donc que il n'envoie pas une donnée toutes les 60ms mais sur un délais encore plus court

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

Re: [MY - AL] Mouvement gameObject

Message par Armand » 22 Mars 2019 12:06

J'ai donc abaissé la fréquence d'envoie des données, ainsi que sa plage de variation, et le rendu est parfait !

Merci beaucoup pour ton aide ;)

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

Re: [MY - AL] Mouvement gameObject

Message par boubouk50 » 22 Mars 2019 12:12

Image

Pense à passer le sujet en [RESOLU]
"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 »