Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Tutoriel 5 : Collider Trigger, Kinematic Body Type

IUT d'Orsay, Université Paris-Saclay

Objectifs

Dans ce tutoriel, nous allons apprendre à utiliser un Trigger dans un Collider.

Climb

  1. Dans l’Inspector de Tiles/Platforms/tiles_102 qui correspond à une échelle, cliquez sur Sprite Editor, zoomez sur le sprite de la tile correspondante, choisissez Custom Physics Shape, puis Generate dans Outline Tool, supprimez le petit rectangle au centre et recadrez le carré qui couvre tout le sprite pour ne couvrir que le milieu de l’échelle.

Nous venons d’éditer la forme de la collision de l’objet. Ainsi, quand le joueur va grimper sur l’échelle, il doit être au milieu de l’échelle au lieu de pouvoir grimper simplement en touchant le bord.

  1. Faites de même pour les tiles 101 et 103 si vous voulez les utiliser.

  2. Créez la Ladders Tilemap avec des échelles en ajoutant les tiles des échelles à votre palette puis créez les bonnes layers associés.

  3. Ajoutez les Tilemap Collider 2D et Composite Collider 2D à Ladders Tilemap.

  4. Changez Body Type dans Rigidbody 2D à Static, cochez Is Trigger dans Composite Collider 2D et choisissez Composite Operation > Merge dans Tilemap Collider 2D.

  1. Modifiez la Layer Collision Matrix pour que la User Layer de Ladders Tilemap ne puisse qu’interagir qu’avec le Player.

  2. Récupérez CapsuleCollider2D myBodyCollider dans PlayerMovement.cs.

  3. Implémentez bool isTouchingALadder().

  4. Ajoutez la méthode void ClimbLadder que nous allons appeler à la fin du Update.

  5. Ajoutez un attribut float climbSpeed et imitez le code de Run pour implémentez une première version de ClimbLadder().

  1. Pour régler le problème de la gravité, nous allons changer la gravité de Player à 0 quand il est sur une échelle avec myRigidbody2D.gravityScale = 0f.

  2. Il faut remettre la bonne gravité quand Player ne touche plus l’échelle donc définissez un attribut float gravityScaleAtStart et récupérez la valeur de myRigidbody2D.gravityScale dans Start.

  3. Quand Player ne touche plus l’échelle, il faut remettre myRigidbody2D.gravityScale à gravityScaleAtStart.

  1. Réglez le premier problème en ajoutant une ligne de code dans else.

  2. Réglez le deuxième problème en modifiant la condition de setBool dans if.

Enemy

  1. Utilisez ce que vous avez appris pour créer l’Enemy grenouille (sprites enemies_21, enemies_22, enemies_23) dans la scène (sauvegardé en tant que prefab) avec les bonnes layers, les bonnes interactions dans la Layer Collision Matrix, un sprite, une seule animation, un Capsule Collider 2D (avec l’option Is Trigger) et un Rigidbody 2D (avec Kinematic comme Body Type).

  1. Dans Assets/Scripts, créez EnemyMovement.cs dans lequel nous allons définir [SerializeField] float moveSpeed et récupérer la composante Rigidbody2D myRigidbody2D.

  2. Dans Update, modifiez la vitesse horizontale dans myRigidbody2D avec moveSpeed.

Nous devons maintenant permettre à Enemy de faire des allers-retours. Pour cela, nous allons ajouter un champ de vision à Enemy, qui sera un Box Trigger. Dès qu’il ne “voit” plus Platforms, il fera demi-tour.

  1. Créer un Box Collider 2D avec Is Trigger devant Enemy qui descend un peu dans le sol.

  2. Ajoutez OnTriggerExit2D(Collider2D other) dans EnemyMovement.cs qui change moveSpeed en -moveSpeed pour que Enemy se déplace dans l’autre direction.

  3. Ajoutez aussi une fonction FlipEnemyFacing qui change localScale de Enemy pour que le sprite tourne aussi dans la bonne direction.