Skip to article frontmatterSkip to article content

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 Sprite Editor de la tile SPA_Ladder, choisissez Custom Physics Shape (au lieu de Sprite Editor en haut à gauche) et dessinez la forme suivante.
Échelle
  1. Créez la Climbing Tilemap avec des échelles et y mettre les bonnes layers.

  2. Ajoutez les Tilemap Collider 2D et Composite Collider 2D à Climbing Tilemap.

  3. Changez Body Type dans Rigidbody 2D à Static, cochez Is Trigger dans Composite Collider 2D et cochez Used by Composite (Composite Operation > Merge) dans Tilemap Collider 2D.

  1. Modifiez la Layer Collision Matrix pour que la User Layer de Climbing 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 un Enemy 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.
Enemy
  1. Ajoutez OnTriggerExit2D(Collider2D other) dans EnemyMovement.cs qui change moveSpeed en -moveSpeed pour que Enemy se déplace dans l’autre direction.

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

  3. Vous pouvez maintenant faire un commit fin du tutoriel 5.