Alors je vous explique je suis sur un jeu 2D avec la possibilité de jouer avec une manette.
Le joueur peut placer son viseur autour de son personnage avec le stick droit de la manette. Le viseur doit rester à une certaine distance autour du joueur (ça forme donc un cercle autour du personnage).
J'ai actuellement ce code :
Code : Tout sélectionner
void Update()
{
if (controller.GetAxisRaw("Move Crosshair Horizontal") != 0 || controller.GetAxisRaw("Move Crosshair Vertical") != 0)
{
Vector2 _positionCrossHair = new Vector2(transform.position.x + controller.GetAxisRaw("Move Crosshair Horizontal"), transform.position.y + controller.GetAxisRaw("Move Crosshair Vertical"));
crossHair.transform.position = _positionCrossHair;
}
}
Dans le code "controller" correspond à la manette du joueur fournis par l'outil. Ce script est posé sur le GameObject Joueur.
"Move Crosshair Horizontal" correspond à l'axe des x du stick droite de la manette.
"Move Crosshair Vertical" correspond à l'axe des y du stick droite de la manette.
Ce script fonctionne à moitié étant donné que quand le joueur relâche le stick, le viseur retourne sur le personnage (ce qui est normal car "controller.GetAxisRaw("Move Crosshair Horizontal") " sera égale à 0. Mais si le joueur maintient le stick à fond dans une direction le viseur se placera au bon endroit (on peut même faire tourner le stick se qui fera tourner le viseur autour du joueur un cercle)
Ce que j'aimerais c'est que même si le joueur relâche totalement le stick ou partiellement (stick pas orienté au max) le viseur du joueur reste à une certaine distance. Et doit donc être «Lock» sur un axe.
A savoir que GetAxisRaw me renvois max 1. Par exemple si le stick à fond vers la droite, controller.GetAxisRaw("Move Crosshair Horizontal") sera égale à 1.
Je précise que je n'ai pas mit la variable distance pour l'instant, que je souhaiterais juste que le viseur reste à à la même distance (prenons le max 1), je pourrais par la suite multiplié le tout par une variable distance.
Alors j'ai eu l'idée de calculer le point de croisement entre le cercle de centre Joueur et de rayon 1 (rayon sera égale à la variable distance), et une droite passant par Joueur jusqu'à la position Joueur + Stick manette.
J'ai donc commencé mes recherches, et sur le papier c'est pas très compliqué (calcul du coefficient directeur de la droite, calcul de l'équation de la droite, équation du cercle etc...) mais je me retrouve avec des équations avec des x et x². Et j'avoue que je ne sais pas retranscrire cela en programmation.
J'ai aussi tenté de placer le viseur en tant qu'enfant d'un GameObject motor, que je pourrais faire tourner, mais ça ne représentait pas la sensation voulu.
Je me complique surement la tête pour quelque chose de simple, et je serais ravi d'avoir vos conseil soit sur un autre moyen de résoudre mon problème, soit sur la réalisation d'équation en code.
Je sais que c'est pas facile à comprendre comme ça, n'hésitez pas si vous avez des questions.