Page 1 sur 1
[Résolu]Déplacement et smooth rotation d'un sprite mode joystick
Publié : 11 Nov 2019 01:46
par mikart
Bonjour,
voila j'ai un petit problème dans mon code je n'arrive pas à garder l'angle dans le quel je me dirige
j'utilise les input.GetAxis pour faire la rotation de mon sprite et il revient toujours à sa position initiale
Code : Tout sélectionner
public Transform rotationTarget;
void Update()
{
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
float angle = Mathf.Atan2(vertical, horizontal) * Mathf.Rad2Deg;
rotationTarget.rotation = Quaternion.Euler(new Vector3(0, 0, angle));
}
merci d'avance pour votre aide
Re: déplacement et rotation d'un sprite
Publié : 11 Nov 2019 10:06
par Moi 1971
Bonjour, c'est normal qu'il revienne toujours à sa position initiale, car ton code ne conditionne pas la rotation. La rotation se fait tout le temps, même quand il n'y a pas de données dans les "Input.GetAxis". Il te faut mettre un if() sur Horizontal différent de 0 OU Vertical différent de 0.
Bon code.
Re: déplacement et rotation d'un sprite
Publié : 11 Nov 2019 13:17
par mikart
Bonjour et merci de la réponse cela fonctionne à merveille
voici le code : le lien pour le teste :
https://stiou62.itch.io/alstar-game?sec ... l72i6utov4
Code : Tout sélectionner
void Update()
{
// mise en place des axes de direction
float horizontal = Input.GetAxis("Horizontal") * speed * Time.deltaTime;
float vertical = Input.GetAxis("Vertical") * speed * Time.deltaTime ;
// calcule de l'angle avec (tan) transformation de l'angle en radian
float angle = Mathf.Atan2(horizontal, vertical) * Mathf.Rad2Deg;
if (horizontal != 0 || vertical != 0)
{
// transformation de l'angle du sprite
transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, -angle);
}
// mouvement par pixel de l'objet vide
translate_targ.Translate (horizontal,vertical,0);
}
Merci encore à toi par contre serais-tu comment je peux smooth la rotation je pense utiliser Quaternion.Lerp ?
[Edit] j'ai peu êtres trouvé ma solution dites moi si je me trompe :
voici le teste :
https://stiou62.itch.io/spaceproje?secr ... lSJHfaBSL8
Code : Tout sélectionner
void Update()
{
// mise en place des axes de direction
float horizontal = -Input.GetAxis("Horizontal") * speed * Time.deltaTime;
float vertical = Input.GetAxis("Vertical") * speed * Time.deltaTime;
// calcule de l'angle avec (tan) transformation de l'angle en radian
float angle = Mathf.Atan2(horizontal, vertical) * Mathf.Rad2Deg;
if (horizontal != 0 || vertical != 0)
{
// transformation de l'angle du sprite
/*
transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, -angle);
rotationTarget.rotation = Quaternion.Euler(new Vector3(0, 0, angle));
*/
//transformation de angle en quaternion
player_rot = Quaternion.Euler (rotationTarget.rotation.x, rotationTarget.rotation.y, angle);
// utilisation de lerp pour smooth la rotation de mon personnage
rotationTarget.rotation = Quaternion.Lerp(rotationTarget.rotation, player_rot, speed_rot * Time.deltaTime);
}
// mouvement par pixel de l'objet vide
translate_targ.Translate(-horizontal, vertical, 0);
}