0
votes

Unity - Le bouton Pause / Reprise déclenchera mon animation de saut - Comment réparer?

J'ai ce code simple. J'ai utilisé l'instruction if pour vérifier que si j'appuie sur le bouton pause, l'animation de saut ne sera pas déclenchée. Une fois le menu en pause activé, lorsque je clique sur Reprendre, le jeu démarre immédiatement et le personnage saute immédiatement. J'ai essayé d'utiliser Coroutines, avec temps réel et time.timeScale = 0.001, mais l'action sera toujours déclenchée. Des idées sur la façon de résoudre?

private void Jump()
    {
        if (Input.touchCount > 0 && rb.velocity.y == 0 && Input.GetTouch(0).phase == TouchPhase.Began)
        {
            startTouchPosition = Input.GetTouch(0).position;
               
            if (startTouchPosition.x < screenMinusButton.x || startTouchPosition.y < screenMinusButton.y)
                rb.velocity = new Vector2(rb.velocity.x, jumpForce);
        }
}


2 commentaires

Cette question peut vous aider: stackoverflow.com/questions/32095383/...


Je vais devoir en apprendre un peu plus, je ne sais encore rien sur ce sujet. Merci


3 Réponses :


1
votes

Essayez de mettre un panneau plein écran invisible, à l'arrière du bouton / menu.


1 commentaires

J'ai une toile, plusieurs panneaux, tout est bien fait.



1
votes

Le personnage saute-t-il réellement ou c'est juste un problème d'animation?

Essayez de vérifier votre rb.velocity dans l'inspecteur. Si ce n'est pas visible, essayez d'activer le mode de débogage dans le coin supérieur.

Si le Y ne change pas, c'est peut-être juste une animation mal déclenchée


1 commentaires

Le joueur saute car dans la méthode de mise à jour, toutes les touches sont considérées comme des sauts. Je voulais faire un If ou quelque chose pour que si j'appuie sur le bouton, le joueur ne saute pas. Merci!



1
votes

Vérifiez si EventSystem a un GameObject actuellement considéré comme actif. Si oui, le toucher est effectué sur le bouton, sinon le toucher n'est pas sur le bouton.

Ajouter à l'aide de UnityEngine.EventSystems; en haut de votre script. Modifiez ensuite votre code comme indiqué ci-dessous.

if (Input.touchCount > 0 && EventSystem.current.currentSelectedGameObject == null && rb.velocity.y == 0 && Input.GetTouch(0).phase == TouchPhase.Began)
{
...
}


2 commentaires

Merci, mais cela fonctionne partiellement. J'utilise la méthode de balayage vers le haut maintenant et si j'appuie sous le bouton puis j'appuie sur le bouton, le héros saute toujours.


Qu'est-ce que screenMinusButton? Est-ce un bouton GUI ou autre chose? Pourriez-vous poster votre code pour sauter?