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()
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