[MY-AL] Velocity perte de vitesse sur une pente

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Badfly
Messages : 62
Inscription : 19 Mai 2017 14:46

[MY-AL] Velocity perte de vitesse sur une pente

Message par Badfly » 09 Fév 2018 16:35

Bonjours à tous,

Voilà je suis sur un jeu 2D, et j'ai un petit problème au niveau de mon controller. J'utilise un rigidbody2D.velocity() pour le déplacement.
Mais quand mon personnage franchis une pente (par exemple un escalier sur lequel on a aplatit le collider en diagonal), il ralentit. Et j'aimerais pallier à ce problème.

J'ai essayé de réduire les Linear Drag au maximum comme l'angular Draq, cela n'as rien changé au problème.
Auriez-vous des suggestions ?

Merci d'avance.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [MY-AL] Velocity perte de vitesse sur une pente

Message par boubouk50 » 09 Fév 2018 16:47

La physique 2D n'est pas mon fort, mais de ce que je sais depuis la documentation officielle:
The value is not usually set directly but rather by using forces. The velocity can also gradually decay due to the effect of drag if this is enabled.
Il est préférable d'utiliser des forces plutôt que de directement modifier la vélocité.
La vélocité est graduellement réduite à cause des drags.

Peut-être déjà faut-il essayer d'utiliser le système physique d'Unity correctement au lieu d'essayer de faire sa sauce?
Je ne connais pas ton niveau en Prog et Unity, donc bon.

Qui plus est, tu es dans la section Code, et tu ne donnes pas de code... Mauvaise section ou bien poste ton code.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Badfly
Messages : 62
Inscription : 19 Mai 2017 14:46

Re: [MY-AL] Velocity perte de vitesse sur une pente

Message par Badfly » 09 Fév 2018 17:16

Bonjour à toi.

Voilà mon code que j'ai en effet oublié de coller sur mon post :

Code : Tout sélectionner

private void FixedUpdate()
    {
       
            inputHorizontal = Input.GetAxis("Horizontal" + controller);
            isGrounded = Physics2D.OverlapBox(boxCheckgrounded.transform.position, boxCheckgrounded.size / 2, 0, whatIsGround); // Détecte une plateforme sous les pieds du joueur
            if (isGrounded) // Si le personnage touche le sol
            {
                if (inputHorizontal != 0 )
                    Run();
             }
    }
private void Run()
    {
        if (inputHorizontal == 1)
        {
            rigidBody2D.velocity = new Vector2(moveVelocity * Time.deltaTime, 0);
        }
        else if (inputHorizontal == -1)
        {
            rigidBody2D.velocity = new Vector2(-moveVelocity * Time.deltaTime, 0);
        }
    }
De plus désolé si j'utilise mal la physique d'unity comme ton message semble le souligner, mais il me semblait bien faire.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [MY-AL] Velocity perte de vitesse sur une pente

Message par boubouk50 » 09 Fév 2018 17:34

Merci de mettre ton code au complet. Je ne sais pas ce qu'est moveVelocity qui est la variable la plus importante de ton code... Je suppose que c'est une variable fixe?

Pour la physique, il est normalement préférable d'utiliser un AddForce () et de border la vélocité. Maintenant tout dépend de ton gamePlay je dirai.
Ici, tu joues sur la vélocité seulement sur un axe, alors que dans une pente il devrait se déplacer aussi vers le haut ou le bas. Je suppose donc que ton personnage tombe et donc qu'il n'est pas tout le temps sur le sol donc n'avance pas à chaque frame.
Essaie, à titre de test, de solliciter aussi l'axe y:

Code : Tout sélectionner

private void Run()
{
	if (Mathf.Abs (inputHorizontal) == 1) //Teste la valeur abslue de inputHorizontal pour avoir qu'un seul cas
		rigidBody2D.velocity = new Vector2(inputHorizontal * moveVelocity * Time.deltaTime,  rigidBody2D.velocity.y);
	}
}
Ainsi, la vélocité en y sera conservée plutôt que supprimée, ce qui voulait dire que ton personnage avance tout droit uniquement.

Question: inputHorizontal est bien un entier? Pas un float?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Badfly
Messages : 62
Inscription : 19 Mai 2017 14:46

Re: [MY-AL] Velocity perte de vitesse sur une pente

Message par Badfly » 09 Fév 2018 17:50

Je ne peux pas mettre tout le code car y'a beaucoup de lignes qui gèrent autre chose donc inutile pour notre cas, ça ne sert à rien de vous embrouiller avec le surplus.

moveVolocity est un public float et inputHorizontal est un float avec la sensibilité des axes augmentées pour que je n'ai que 1, 0 ou -1

J'ai essayé ce que tu m'as envoyé et cela fonctionne plutôt bien je te remercie. J'étais partis sur une augmentation dynamique de la vitesse pour palier à la pente >< Je te remercie de ton aide.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [MY-AL] Velocity perte de vitesse sur une pente

Message par boubouk50 » 09 Fév 2018 18:19

Si horizontalInput ne peut que prendre -1, 0 ou 1, autant le passer en entier, sinon les conditions == pourraient ne pas fonctionner correctement.
Aussi, la condition de la fonction Run est obsolète vu que tu testes déjà si horizontalInput != 0 dans le fixedupdate (). Run () n'a donc qu'une seule ligne.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

dan44180
Messages : 31
Inscription : 11 Août 2016 08:20
Contact :

Re: [MY-AL] Velocity perte de vitesse sur une pente

Message par dan44180 » 12 Fév 2018 08:06

l e ralentissement de ton perso vient du fait que que tu lui applique une force(la velocité) sur un axe droit mais lorsque ton perso essaie de monter un plan incliné il faudrait que la direction de la force soit modifiée pour avoir le meme angle que le plan incliné, car comme tu fais actuellement tu demande a ton perso d'aller tout droit quoi qu'il arrive et lui, il a plus envie de traverser le plan incline que de le monter.
je pense meme que si ta velocite etait assez forte il traverserai et ne monterai meme pas

Avatar de l’utilisateur
DevAmat
Messages : 435
Inscription : 23 Nov 2016 11:50

Re: [MY-AL] Velocity perte de vitesse sur une pente

Message par DevAmat » 12 Fév 2018 10:09

A l'aide d'un raycast vers le sol tu pourrais obtenir la normal au plan (sol) et faire ton calcule pour déterminer l'angle de la pante et du coup la direction a donner à ton personnage.

Répondre

Revenir vers « (C#) CSharp »