Tutoriel 4 : Flip Sprite, Animer les mouvements, Layer Collision Matrix, Jump et Physics Material 2D
Objectifs¶
Nous allons apprendre à :
- flipper le sprite de Player selon la direction dans laquelle il bouge,
- relier les animations et les mouvements de Player,
- activer/désactiver les collisions entre les différentes layers,
- faire sauter Player et
- ajouter un matériau aux GameObjects.
Flip Sprite¶
Nous voulons que Player “se tourne” vers la gauche ou la droite selon la direction dans laquelle il bouge. Pour cela, il faut changer Scale (à -1 ou 1 sur l’axe X) dans la composante Transform de Player.
Ajoutez une méthode
FlipSpritedansPlayerMovement.csque nous allons appeler dansUpdate, aprèsRun.Dans
FlipSprite, pour décider si le sprite doit être flippé, nous allons d’abord vérifier si Player est en mouvement (horizontal) en définissant un booléenbool playerHasHorizontalSpeed.La valeur de
playerHasHorizontalSpeedseraMathf.Abs(myRigidbody2D.velocity.x) > Mathf.Epsilonqui nous dit que si la valeur absolue de la vitesse sur l’axe x de Player est plus grand queEpsilon(au lieu de 0 car une valeur très petite comme 0.0000001 peut être considérée comme nulle pour éviter des mouvements parfois irréguliers), alors le joueur est en mouvement (horizontal).Si
playerHasHorizontalSpeedest vrai, alors nous allons flipper le sprite de Player en changeant la valeurtransform.localScalequi est un vecteur à trois dimensionsVector3. Nous voulons seulement changer la valeur sur l’axe x detransform.localScaledonc les valeurs sur l’axe y et z vont rester à1f. Pour l’axe x, simyRigidbody2D.velocity.xest positif (mouvement vers la droite), alors nous voulons la valeur1et-1sinon. Ceci peut être fait avecMathf.Sign()qui retourne1si l’argument est positif et-1sinon.
Relier animations et mouvements¶
Nous voulons que les bonnes animations soit utilisées quand Player fait les movements correspondant.
- Récupérez la composante Animator de Player dans PlayerMovement et nommez-la
Animator myAnimator.
Indices
Souvenez-vous qu’il faut faire GetComponent dans Start ?
Dans
Run, après le calcul de la vitesse de Player, définissez le booléenbool playerHasHorizontalSpeedet vérifiez siplayerHasHorizontalSpeedest vrai comme avant.Nous pouvons maintenant affectez le booléen
isRunningde l’animator à la même valeur grâce àmyAnimator.SetBool("isRunning", playerHasHorizontalSpeed).Testez l’animation des mouvements horizontaux de Player en Play mode.
Layer Collision Matrix¶
Nous avons défini les users layers pour nos GameObjects pour pouvoir gérer les collisions/interactions entre eux. Plus précisément, ceci est fait grâce à la Layer Collision Matrix.
- Dans Edit > Project Settings > Physics 2D > Layer Collision Matrix, tout décochez, puis cochez seulement la collision entre Player et Platforms pour indiquer que seul Player peut interagir avec Platforms pour le moment. Nous pouvons ajouter d’autres interactions dans le futur selon les mécaniques de jeu implémentées.
Jump¶
- Ajoutez une composante Box Collider 2D à Player au niveau des pieds du personnage. Faites attention à ce que la largeur du rectangle ne dépasse pas la largeur du Capsule, sinon le personnage pourrait sauter quand il est contre un mur.

Récupérez la composante
BoxCollider2DdansPlayerMovement.cscomme avant et nommez-lamyFeetCollider.Définissez la méthode
isTouchingTheGroundde la façon suivante.
bool isTouchingTheGround(){
return myFeetCollider.IsTouchingLayers(LayerMask.GetMask("Platforms"));
}Similairement à
runSpeed, définissez une variable[SerializeField] float jumpSpeed.Similairement à
OnMove, définissez la méthodeOnJumpqui prendInputValue valuecomme argument et ajoute à la vitesse de Player, si Player touche le sole etvalue.isPressed, unVector2sans vitesse horizontale et une vitesse verticale dejumpSpeed.Pour que les collisions entre Player et le monde soit constamment détecté, changez Collision Detection dans Rigidbody 2D de Player à Continuous au lieu de Discrete.
- Changer Gravity Scale dans la composante Rigidbody 2D de Player et
jumpSpeeddans l’Inspector pour que le joueur puisse sauter le bon nombre (à vous de choisir) de tiles.
Physics Material 2D¶
Pour éviter que Player se colle contre les murs, nous allons lui donner une Physics Material 2D sans friction.
Créez un répertoire
MaterialsdansAssets.Dans
Assets/Materials, créez 2D > Physics Material 2D et nommez-le No Friction Material.Changez Friction et Bounciness à 0 dans No Friction Material et mettez-le dans les Colliders et le Rigidbody de Player.
Testez pour voir que Player ne puisse plus se coller aux murs.
Vous pouvez maintenant faire un commit
fin du tutoriel 4et passer au Quiz 2.