Destruction des ennemis par un saut, comme dans "Mario" Unity 2D

Bonjour Dans cet article, je voudrais partager comment réaliser la destruction d'ennemis par saut, comme dans Mario. Je suis encore en train de m'étudier, donc si j'ai des conseils ou des astuces utiles, veuillez écrire dans les commentaires. Eh bien, après de nombreuses vues de tutoriels et des articles lus, seuls deux intéressants ont été trouvés, et probablement le moyen le plus simple de mettre en œuvre les options:

  • le premier est le contact des points de collision,
  • le second est le contact des collisionneurs, lorsque deux collisionneurs sont accrochés à l'objet, l'un prend la vie du joueur, et le second détruit l'objet auquel il est attaché.

Pour commencer, nous allons écrire une fonction qui prendra la vie du joueur, et est nécessaire pour les deux options:

public int health = 3; void Hurt() { health--; if (health <= 0) SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); } 

1 option


Nous analyserons la première option si le point de contact est supérieur ou égal à une hauteur de 0,6, le joueur saute par dessus l'ennemi est détruit, sinon le joueur subit des dégâts.

 void OnCollisionEnter2D(Collision2D collision) { Enemy enemy = collision.collider.GetComponent<Enemy>(); if (enemy != null) { foreach (ContactPoint2D point in collision.contacts) { if (point.normal.y >= 0.6f) { enemy.EnemyHurt(); } else { Hurt(); } } } 

(Un fragment du code qui est accroché sur le lecteur)

 public void EnemyHurt() { Destroy(this.gameObject); } 

(Un extrait de code qui se bloque sur l'ennemi)

2 options


Ajoutez un collisionneur, faites-le un peu plus haut que le collisionneur principal, cochez «est un déclencheur» sur l'objet, raccrochez le script et ajoutez ce morceau de code.

 private void OnTriggerEnter2D(Collider2D collision) { if (collision.gameObject.name == "Player") Destroy(this.gameObject); } 

(Un extrait de code qui se bloque sur l'ennemi)

Lorsque le collisionneur touche un objet appelé «Player», l'objet est détruit (comme marque de contact, vous pouvez utiliser une balise).

Plus loin dans le même objet, nous créons un autre gameObject et nous l'appelons DeathZone. Ajoutez-y un collisionneur, agrandissez-le et cochez la case «is Trigger».



  private void OnTriggerEnter2D(Collider2D collision) { if (collision.gameObject.name == "DeathZone") { Hurt(); } } 

(Un fragment du code qui est accroché sur le lecteur)

Comme vous pouvez le voir, contrairement à la première option, dans la deuxième option, l'utilisation de collisionneurs était légèrement plus importante, et il n'était pas nécessaire d'utiliser des déclencheurs.


(Deuxième option)

Vous pouvez également ajouter que le joueur saute après la destruction de l'ennemi. Eh bien, tout semble aller, merci à tous pour votre attention!

Source: https://habr.com/ru/post/fr474352/


All Articles