J'essaye de faire pivoter mon objet 2D autour de ma souris, voici le code que j'ai:
void Update()
{
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector3 direction = mousePosition - transform.position;
float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0, 0, angle);
// Debug.Log(angle);
}
Mon objet, qui est une flèche, est par défaut pointé vers le bas, donc avant de commencer le script, je règle sa rotation z sur 90, donc il est tourné vers la droite.Si je supprime la ligne transform.rotation, l'angle affiché sera à droite, lorsque mon curseur est au-dessus, il dit 90, à gauche, il dit 180 etc. Donc ma question est, pourquoi dois-je ajouter 90 degrés à l'angle pour que cela fonctionne réellement? Pourquoi cette version ne fonctionne-t-elle pas? Merci!
Mathf.Atan2
(Voir aussi Wikipedia - Atan2 )
La valeur de retour est l' angle entre l'axe des x [=
Vector3.right
] et un vecteur 2D commençant à zéro et se terminant à (x, y).
Cela fonctionnerait comme prévu si votre flèche par défaut pointait vers la droite mais la vôtre est
par défaut pointant vers le bas
vous pouvez simplement ajouter la rotation de décalage en haut comme
transform.rotation = Quaternion.Euler(0, 0, angle + 90);
Sinon, si vous en avez besoin pour plusieurs objets avec des décalages différents, utilisez un champ configurable comme
[SerializeField] private float angleOffset;
...
transform.rotation = Quaternion.Euler(0, 0, angle + angleOffset);
Ou vous pouvez le faire pivoter manuellement pour faire face correctement à la droite avant de démarrer l'application et stocker cette rotation de décalage par défaut comme
private Quaternion defaultRotation;
private void Awake ()
{
defaultRotation = transform.rotation;
}
puis fais
transform.rotation = defaultRotation * Quaternion.Euler(0, 0, angle);
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots