Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Adicionar Partículas | Melhore o Jogo
Jogo de Luta no Unity

bookAdicionar Partículas

Explicação das Alterações no Método Update

private void Update()
{
    stateManager.UpdateStates(Time.deltaTime);
    scale.x = transform.position.x > player.position.x ? -1 : 1;
    transform.localScale = scale;
}

O método Update no script do inimigo agora inclui lógica para atualizar o gerenciador de estados, garantir que o inimigo esteja voltado para o jogador e lidar com um caso específico em que o inimigo está em um DeathState. Essa lógica foi adicionada para evitar que o inimigo continue voltado para o jogador após ter morrido.

Componentes do Método

Atualização do StateManager

stateManager.UpdateStates(Time.deltaTime)

Esta linha atualiza o gerenciador de estados, passando o tempo decorrido desde o último frame (Time.deltaTime). Garante que o estado atual seja atualizado corretamente a cada frame.

Verificação do DeathState

if (stateManager.GetCurrentState() is DeathState) return;

Esta linha verifica se o estado atual é DeathState. Se o inimigo estiver em DeathState, o método retorna imediatamente, impedindo quaisquer outras atualizações para virar em direção ao jogador ou outros comportamentos.

Virando para o Jogador

As linhas a seguir garantem que o inimigo sempre esteja voltado para o jogador:

scale.x = transform.position.x > player.position.x ? -1 : 1;
transform.localScale = scale;

scale.x = transform.position.x > player.position.x ? -1 : 1;

Esta linha verifica se a posição x do inimigo é maior que a posição x do jogador:

  • Se verdadeiro, scale.x é definido como -1, fazendo o inimigo olhar para a esquerda;
  • Se falso, scale.x é definido como 1, fazendo o inimigo olhar para a direita.

transform.localScale = scale;

Esta linha aplica a escala atualizada ao transform do inimigo, garantindo que ele esteja voltado para a direção correta.

Por que Fizemos Desta Forma

Tratamento do Estado de Morte

Adicionar a verificação para DeathState garante que o inimigo não continue atualizando seu comportamento ou orientação após ter morrido. Isso é fundamental para manter a lógica do jogo e evitar comportamentos inesperados depois que o inimigo deveria estar inativo.

Lógica Centralizada

Ao mover a lógica de orientação para o jogador para o método Update, centralizamos esse comportamento, reduzindo redundâncias e melhorando a manutenção do código. Isso garante que o inimigo sempre fique voltado para o jogador, independentemente do estado atual, o que simplifica o código específico de cada estado.

Explicação do Tratamento de Morte do Inimigo

public class DeathState : State
{
    Animator animator;

    public DeathState(Animator animator)
    {
        this.animator = animator;
    }

    public override void StartState()
    {
        isStateFinished = false;
        animator.SetBool("death", true);
    }

    public override void EndState()
    {
    }
}

A classe DeathState é um estado específico que trata o comportamento do inimigo quando ele morre.

Por que Fizemos Desta Forma

Manipulação do Comportamento de Morte

A classe DeathState gerencia especificamente o comportamento do inimigo ao morrer, garantindo que a animação de morte seja executada e o estado seja marcado como finalizado.

Integração com Animação

O uso de parâmetros do animator garante que a animação de morte esteja corretamente sincronizada com a mudança de estado, proporcionando uma experiência suave e realista.

Geração de Partículas na Morte do Inimigo

if (health <= 0)
{
    stateManager.ChangeState(deathState);
    var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity);
    deathParticle.Play();
    Destroy(deathParticle.gameObject, 5);
}

Este código mostra como o inimigo lida com sua morte quando sua vida chega a zero. Ele faz a transição para o DeathState e executa um efeito de partículas de morte.

Análise do Código

Verificação de Vida

if (health <= 0)

Esta condição verifica se a vida do inimigo caiu para zero ou menos.

Transição para DeathState

stateManager.ChangeState(deathState)

Esta linha faz a transição do inimigo para o DeathState usando o StateManager.

Instanciação das Partículas de Morte

var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity)

Esta linha cria uma instância do efeito de partículas de morte na posição do inimigo. deathParticles é um prefab que contém o sistema de partículas para o efeito de morte. Quaternion.identity garante que as partículas não tenham rotação.

Execução das Partículas de Morte

deathParticle.Play()

Esta linha executa o efeito de partículas instanciado.

Destruição das Partículas de Morte

Destroy(deathParticle.gameObject, 5)

Esta linha agenda a destruição do objeto GameObject do efeito de partículas após 5 segundos, garantindo que ele não permaneça indefinidamente no jogo.

Por Que Fizemos Desta Forma

Gerenciamento de Estado: A transição para DeathState garante que o comportamento de morte do inimigo seja devidamente gerenciado e que qualquer lógica específica para o estado de morte seja executada.

Efeitos Visuais: A execução de um efeito de partículas de morte fornece um retorno visual ao jogador, aprimorando a experiência do jogo.

question mark

O que acontece com o sistema de partículas quando a vida é menor ou igual a zero?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 1

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

bookAdicionar Partículas

Explicação das Alterações no Método Update

private void Update()
{
    stateManager.UpdateStates(Time.deltaTime);
    scale.x = transform.position.x > player.position.x ? -1 : 1;
    transform.localScale = scale;
}

O método Update no script do inimigo agora inclui lógica para atualizar o gerenciador de estados, garantir que o inimigo esteja voltado para o jogador e lidar com um caso específico em que o inimigo está em um DeathState. Essa lógica foi adicionada para evitar que o inimigo continue voltado para o jogador após ter morrido.

Componentes do Método

Atualização do StateManager

stateManager.UpdateStates(Time.deltaTime)

Esta linha atualiza o gerenciador de estados, passando o tempo decorrido desde o último frame (Time.deltaTime). Garante que o estado atual seja atualizado corretamente a cada frame.

Verificação do DeathState

if (stateManager.GetCurrentState() is DeathState) return;

Esta linha verifica se o estado atual é DeathState. Se o inimigo estiver em DeathState, o método retorna imediatamente, impedindo quaisquer outras atualizações para virar em direção ao jogador ou outros comportamentos.

Virando para o Jogador

As linhas a seguir garantem que o inimigo sempre esteja voltado para o jogador:

scale.x = transform.position.x > player.position.x ? -1 : 1;
transform.localScale = scale;

scale.x = transform.position.x > player.position.x ? -1 : 1;

Esta linha verifica se a posição x do inimigo é maior que a posição x do jogador:

  • Se verdadeiro, scale.x é definido como -1, fazendo o inimigo olhar para a esquerda;
  • Se falso, scale.x é definido como 1, fazendo o inimigo olhar para a direita.

transform.localScale = scale;

Esta linha aplica a escala atualizada ao transform do inimigo, garantindo que ele esteja voltado para a direção correta.

Por que Fizemos Desta Forma

Tratamento do Estado de Morte

Adicionar a verificação para DeathState garante que o inimigo não continue atualizando seu comportamento ou orientação após ter morrido. Isso é fundamental para manter a lógica do jogo e evitar comportamentos inesperados depois que o inimigo deveria estar inativo.

Lógica Centralizada

Ao mover a lógica de orientação para o jogador para o método Update, centralizamos esse comportamento, reduzindo redundâncias e melhorando a manutenção do código. Isso garante que o inimigo sempre fique voltado para o jogador, independentemente do estado atual, o que simplifica o código específico de cada estado.

Explicação do Tratamento de Morte do Inimigo

public class DeathState : State
{
    Animator animator;

    public DeathState(Animator animator)
    {
        this.animator = animator;
    }

    public override void StartState()
    {
        isStateFinished = false;
        animator.SetBool("death", true);
    }

    public override void EndState()
    {
    }
}

A classe DeathState é um estado específico que trata o comportamento do inimigo quando ele morre.

Por que Fizemos Desta Forma

Manipulação do Comportamento de Morte

A classe DeathState gerencia especificamente o comportamento do inimigo ao morrer, garantindo que a animação de morte seja executada e o estado seja marcado como finalizado.

Integração com Animação

O uso de parâmetros do animator garante que a animação de morte esteja corretamente sincronizada com a mudança de estado, proporcionando uma experiência suave e realista.

Geração de Partículas na Morte do Inimigo

if (health <= 0)
{
    stateManager.ChangeState(deathState);
    var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity);
    deathParticle.Play();
    Destroy(deathParticle.gameObject, 5);
}

Este código mostra como o inimigo lida com sua morte quando sua vida chega a zero. Ele faz a transição para o DeathState e executa um efeito de partículas de morte.

Análise do Código

Verificação de Vida

if (health <= 0)

Esta condição verifica se a vida do inimigo caiu para zero ou menos.

Transição para DeathState

stateManager.ChangeState(deathState)

Esta linha faz a transição do inimigo para o DeathState usando o StateManager.

Instanciação das Partículas de Morte

var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity)

Esta linha cria uma instância do efeito de partículas de morte na posição do inimigo. deathParticles é um prefab que contém o sistema de partículas para o efeito de morte. Quaternion.identity garante que as partículas não tenham rotação.

Execução das Partículas de Morte

deathParticle.Play()

Esta linha executa o efeito de partículas instanciado.

Destruição das Partículas de Morte

Destroy(deathParticle.gameObject, 5)

Esta linha agenda a destruição do objeto GameObject do efeito de partículas após 5 segundos, garantindo que ele não permaneça indefinidamente no jogo.

Por Que Fizemos Desta Forma

Gerenciamento de Estado: A transição para DeathState garante que o comportamento de morte do inimigo seja devidamente gerenciado e que qualquer lógica específica para o estado de morte seja executada.

Efeitos Visuais: A execução de um efeito de partículas de morte fornece um retorno visual ao jogador, aprimorando a experiência do jogo.

question mark

O que acontece com o sistema de partículas quando a vida é menor ou igual a zero?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 1
some-alt