pour poser le contexte, je réalise un jeu de style Rogue-like (dans le genre Vampire survivors)
donc un personnage au centre qui modifie son orientation en fonction du déplacement de la souris autour de lui.
Mon problème peut paraitre simple, mais je ne trouve pas la solution :
Je souhaite faire tirer une flèche à mon personnage. j'instancie donc la flèche au niveau de l'arc du personnage à l'aide d'un AnimEvent au moment où il bande son arc. cette flèche est orientée dans la même direction que celle du personnage.
Code : Tout sélectionner
void TirerFleche()
{
Vector3 offset = new Vector3(0f, 0f, 0.0002f); // j'ajoute un léger décalage
// je récupère la rotation de mon personnage (le script se trouve sur lui)
float rotationYJoueur = transform.rotation.eulerAngles.y;
Quaternion rotation = Quaternion.Euler(0f, rotationYJoueur, 0f);
// j'instancie la flèche avec la position et rotation locales ajustées
GameObject nouvelleFleche = Instantiate(flecheProjo, player.arme.transform.position + offset, rotation);
}
J'ai donc un script sur la flèche pour gérer son déplacement et là ça coince :
Code : Tout sélectionner
void Update()
{
DirectionFleche();
distanceParcourue += forceDeTir * Time.deltaTime;
// si la flèche a parcouru la distance de destruction je la détruit
if (distanceParcourue >= distanceDeDestruction)
{
DetruireFleche();
}
public void DirectionFleche()
{
directionDeTir = transform.forward;
directionDeTir.Normalize();
transform.Translate(directionDeTir * forceDeTir * Time.deltaTime);
// ici forceDeTir est une variable float
}
}
- quand l'axe Z local est orienté vers l'axe X globale, la flèche va vers l'axe X local.
- quand l'axe Z local est orienté vers l'axe - X global, la flèche va vers le -X local.
- et ainsi de suite, si il est orienté vers le sud-ouest, elle ira vers le sud-est.
-Le seul cas où ça fonctionne bien c'est lorsque les deux axes sont alignés (donc le Z vers le nord)
Un peu comme si (prenons l'exemple de la flèche qui pointe vers l'ouest, donc X global) il prenait l'axe Z local, le calquait sur l'orientation Globale donc le x Global devient le Z local, puis qu'il recalqué ça sur la direction local, comme l'axe Z est devenu l'axe X alors forward suis l'axe X local.
voici un petit screen pour illustrer l'exemple :
Je ne sais pas si j'ai réussi à être clair, j'espère que mes tentatives d'explications et hypothèses ne vous ont pas trop embrouillé.
Merci d'avance pour votre aide.