5
respostas

Dano e Morte do inimigo

As aulas que implementam a animação de dano e de morte do inimigo estão faltando, na aula de implementação de morte só tem referente ao player. Podem corrigir?

5 respostas

Olá amigo, veja essa resposta https://cursos.alura.com.br/forum/topico-sugestao-implementacao-do-dano-e-morte-do-inimigo-441931

Eu vi essa resposta, mas pelo menos para mim só aparece a implementação do dano e morte do player. De qualquer forma, consegui mexer no código e nas animações e implementei tudo :D Mas obg pela ajuda!

Olá @Raphael Cavalcante de Medeiros, também não encontei, somento do player. Tu teve criar um Health.cs pro inimigo ?

Oi! Eu fiz a implementação replicando o passo a passo do player pro inimigo, e fiz as adaptações no código do inimigo com o código disponibilizado da aula.

Boa tarde, pessoal!

Estarei listando todos os passos necessários para implementar a animação de morte para o inimigo. Esses passos não fogem muito dos passos realizados na implementação do player.

  1. Adicionar animação de morte: Insira a animação "anim_dead" no animator controller do enemy.

  2. Criar transição: Conecte "Any state" à animação de morte, desmarcando "Has exit time" e definindo a duração como zero, agora nas condições da transição, adicione o gatilho "dead".

  3. Ajustar animação: Verifique a animação de morte e ajuste os sprites no sprite editor para evitar que o inimigo flutue. E para aplicar clique em "apply" após ajustar os sprites.

  4. No método Awake, que está dentro do arquivo BaseEnemy.cs, adicione: health.OnHurt += PlayHurtAnim;, crie o método PlayHurtAnim com: animator.SetTrigger("hurt"); e adicione o código animator.SetTrigger("dead"); dentro do método HandleDeath.

Ao fim de toda essa alteração o seu código ficará da seguinte forma:

[RequireComponent(typeof(Animator), typeof(AudioSource))]
public abstract class BaseEnemy : MonoBehaviour
{
    // Código omitido

    protected virtual void Awake()
    {
        animator = GetComponent<Animator>();
        audioSource = GetComponent<AudioSource>();
        health = GetComponent<Health>();

        health.OnHurt += PlayHurtAnim; // código adicionado
        health.OnDead += HandleDeath;
    }

    protected abstract void Update();

    private void PlayHurtAnim() => animator.SetTrigger("hurt"); // código adicionado
    
    private void HandleDeath()
    {
        animator.SetTrigger("dead"); // código adicionado
        StartCoroutine(DestroyEnemy(2));
    }

    private IEnumerator DestroyEnemy(int time)
    {
        yield return new WaitForSeconds(time);
        Destroy(this.gameObject);
    }
}

Adicionei o comentário // código adicionado aos trechos que foram adicionados. Por fim, execute o jogo para verificar se a animação de morte e a desativação do movimento funcionam corretamente.

Se precisar de mais alguma coisa, estou aqui para ajudar!