[RESOLU] [MY - AL] Mouvement gameObject
Re: [MY - AL] Mouvement gameObject
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
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 ?
Après j'apelle Update qui lui va faire bouger le bateau ?
Voila comment je vois le fonctionnement
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 ?
- boubouk50
- ModoGenereux
- Messages : 6225
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [MY - AL] Mouvement gameObject
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.
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: [MY - AL] Mouvement gameObject
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.
Le diagramme ci-dessus correspond il au même raisonnement que le tien.
- boubouk50
- ModoGenereux
- Messages : 6225
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [MY - AL] Mouvement gameObject
"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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: [MY - AL] Mouvement gameObject
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.
Maintenant voici ma fonction Update() & MoveTanker()
Voici le résultat donné :
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());
}
}
}
}
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);
}
- boubouk50
- ModoGenereux
- Messages : 6225
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [MY - AL] Mouvement gameObject
On va finir par y arriver
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 ()
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: [MY - AL] Mouvement gameObject
Fonction resetPos() :
Erreur de ma part que j'ai modifée mais pas actualiser sur le screen ^^
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
Code : Tout sélectionner
static void resetPos()
{
positionDeDepart = positionDArrivee;
positionDArrivee.y = (float)wave.h;
t = 0F;
tempsTotal = 0.06F/* code à venir */;
print("RESET DONE");
}
Code : Tout sélectionner
transform.position = Vector3.Lerp(Network.getPositionDeDepart(), Network.getPositionDArrivee(), t / Network.getTempsTotal());
Re: [MY - AL] Mouvement gameObject
Je pense donc que il n'envoie pas une donnée toutes les 60ms mais sur un délais encore plus court
Re: [MY - AL] Mouvement gameObject
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
Merci beaucoup pour ton aide
- boubouk50
- ModoGenereux
- Messages : 6225
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [MY - AL] Mouvement gameObject
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation