0
votes

Le joueur arrête de déplacer la direction du personnage réinitialise [Unity 2D]

Mon personnage est une voiture et j'essaie de faire pivoter la direction qu'elle bouge, jusqu'à présent, j'ai réussi à le faire, mais une fois que je cesse de bouger, le personnage se retourne dans la direction.

Aussi comment puis-je me rendre à mes virages d'un côté sur le site opposé lisse? P>

Voici mon code jusqu'à présent: P>

    [SerializeField] float driveSpeed = 5f;
 //state
 Rigidbody2D myRigidbody;
 // Start is called before the first frame update
 void Start()
 {
     myRigidbody = GetComponent<Rigidbody2D>();
 }
 // Update is called once per frame
 void Update()
 {
     Move();        
 }

 private void Move()
 {
     //Control of velocity of the car
     float HorizontalcontrolThrow = CrossPlatformInputManager.GetAxis("Horizontal"); // Value between -1 to 1
     float VerticalcontrolThrow = CrossPlatformInputManager.GetAxis("Vertical"); // Value between -1 to 1
     Vector2 playerVelocity = new Vector2(HorizontalcontrolThrow * driveSpeed, VerticalcontrolThrow * driveSpeed);
     myRigidbody.velocity =playerVelocity;


     **//Direction of the car**
     Vector2 direction = new Vector2(HorizontalcontrolThrow, VerticalcontrolThrow);
     float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
     myRigidbody.rotation = angle;
 }


0 commentaires

3 Réponses :


0
votes

Je ne suis pas sûr de cela, mais peut-être que cette dernière ligne "myriguidbody.rotation = angle" soit appelée chaque image est ce qui fait que votre voiture réinitialise sa rotation. Peut-être le changer à "myriguidbody.rotation * = angle" ou "myriguidbody.rotation + = angle".


2 commentaires

Bonjour, j'ai essayé de couper que cela ne fonctionnait pas, il vient de faire de la voiture folle ou de ne pas bouger, merci d'avoir essayé et j'aimerais aimer ici les suggestions de Mire!


Je suis désolé. Je n'ai pas réalisé que vous aviez répondu auparavant. Avez-vous essayé le joint de roue 2D? C'est une approche différente, mais contribuerait probablement avec votre mécanique de voiture.



0
votes

On dirait que cela peut être parce que horizontalcontrolthrow et verticalControlthrow vont être réinitialisés lorsque vous relâchez les commandes. S'il s'agit de réinitialiser à son orientation d'origine, ce qui se passe est que jusqu'à ce que vous déplaciez, ces deux valeurs vont être à leur valeur par défaut. Vous vous déplacez ensuite et cela affecte la rotation. Mais lorsque vous relâchez les commandes, ces valeurs sont à nouveau de retour aux valeurs de départ, de même que votre rotation.

Ce que vous devez donc faire est d'essayer de séparer l'horizontalcontrolthrow et verticalControlter du reste du code, qui devrait seulement être activé lorsque au moins une de ces deux variables ne correspond pas à leur réglage par défaut (je ne me souviens pas de ce que les fonctions de l'axe se rendent en ce moment).

EDIT:

ANNE La déclaration devrait suffire (un peu de pseudo rugueux): xxx


3 commentaires

Je suis d'accord avec vous sur les lancers de réinitialisation lorsqu'il ne se déplace pas (Cuase ils retournent à zéro) mais ne comprennent pas comment séparer le lancer de cette partie du code, pouvez-vous être plus précis?


J'ai fourni un peu de pseudo simple. L'objectif est de ne pas le faire bouger ou pivoter lorsque au moins un de l'axe n'est pas à l'état de repos. Donc, de cette façon, si c'est au repos, cela n'affecte pas l'orientation actuelle. Bien sûr, si vous souhaitez que la fonctionnalité de déplacement soit affectée par l'axe zéro, vous mettriez ce code à l'extérieur du bloc IF.


Oui cela fonctionne ! Merci ! Savez-vous quelque chose à propos du claquement de rotation? Comment puis-je le faire tourner plus doucement?



0
votes

J'ai résolu la rotation de l'instantané à l'aide de quaternion à la rotation, l'Issiu que j'avais avec elle était de le convertir de 3D en 2D, via le guide de ce clip: YouTube.com/watch?v=MKLP approximée et a fait mes ajustements ça marche très bien!


0 commentaires