Destruição de inimigos por um salto, como em "Mario" Unity 2D

Olá Neste artigo, gostaria de compartilhar como realizar a destruição de inimigos de um salto, como em Mario. Ainda estou estudando, por isso, se tenho alguma dica ou dica útil, escreva nos comentários. Bem, após várias visualizações de tutoriais e artigos lidos, apenas dois interessantes foram encontrados e provavelmente a maneira mais fácil de implementar as opções:

  • o primeiro é o contato dos pontos de colisão,
  • o segundo é o contato dos coletores, quando dois coletores são pendurados no objeto, um tira a vida do jogador e o segundo destrói o objeto ao qual está anexado.

Para começar, escreveremos uma função que tirará a vida do jogador e é necessária para as duas opções:

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

1 opção


Analisaremos a primeira opção se o ponto de contato for maior ou igual a uma altura de 0,6, se o jogador pular acima do inimigo for destruído, caso contrário, o jogador sofrerá dano.

 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(); } } } 

(Um fragmento do código pendurado no player)

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

(Um trecho de código pendurado no inimigo)

Opção 2


Adicione um colisor, aumente um pouco mais do que o colisor principal, marque "is Trigger" no objeto, desligue o script e adicione este fragmento de código.

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

(Um trecho de código pendurado no inimigo)

Quando o colisor toca em um objeto chamado “Player”, o objeto é destruído (como uma marca de contato, você pode usar a tag).

Mais adiante, no mesmo objeto, criamos mais um gameObject e o chamamos de DeathZone. Adicione um colisor a ele, aumente um pouco e marque a caixa "is Trigger".



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

(Um fragmento do código pendurado no player)

Como você pode ver, ao contrário da primeira opção, na segunda opção, o uso de coletores era um pouco maior e não havia necessidade de usar gatilhos.


(Segunda opção)

Você também pode adicionar que o jogador pula após a destruição do inimigo. Bem, tudo parece estar, obrigado a todos pela atenção!

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


All Articles