Desenvolvimento Unity

Como implementar feedback e controle de danos em personagens 2D na Unity

O post Como implementar feedback e controle de danos em personagens 2D na Unity ensina como controlar o dano em personagens 2D, tornando-os imunes durante alguns segundos e como transmitir visualmente essa informação ao jogador.

Unity: Feedback e controle de danos em personagens 2D

Uma das coisas mais importantes em todos os jogos eletrônicos é conseguir demonstrar para o player qual é o estado físico de seu personagem e se o mesmo pode sofrer dano ou não. 

Uma forma de fazer isso é utilizar o efeito de piscar no personagem, isto é, toda vez que um personagem estiver piscando significa que o mesmo acabou de sofrer um dano e ficará imune durante  um período de tempo. Para fazer com que o feedback funcione, iremos criar um novo script do tipo C#.

Script básico

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player2 : MonoBehaviour
{
  bool imortal;
  public float tempoIP;
  private Renderer mainRenderer;

  private void Start()
  {
    mainRenderer = GetComponent<SpriteRenderer>();
  }

  public void OnTriggerEnter2D(Collider2D collision)
  {
    if (!imortal)
    {
      if (collision.gameObject.tag == "Inimigo")
      {
        StartCoroutine(PiscarDano());
        imortal = true;
        Invoke("ResetImortal", tempoIP);
      }
    }
  }

  IEnumerator PiscarDano()
  {
    for (int i = 0; i < tempoIP; i++)
    {
      mainRenderer.enabled = true;
      yield return new WaitForSeconds(0.1f);
      mainRenderer.enabled = false;
      yield return new WaitForSeconds(0.1f);
    }
    mainRenderer.enabled = true;
  }

  void ResetImortal()
  {
    imortal = false;
  }
}

Explicando Variáveis

  • A booleana “imortal” é responsável em fazer com que o jogador não tome dano quando ela for verdadeira. A imortalidade é ativada quando o jogador toma dano e desativada quando o tempo pré-determinado da variável “tempoIP” chega ao fim.
  • A variável “tempoIP” determina, simultaneamente, o tempo de imortalidade e quanto tempo o jogador fica piscando.
  • A variável “mainRenderer” está atrelada ao Sprite renderer; o Sprite renderer é o componente responsável em fazer com que a imagem do nosso personagem apareça na tela. Desabilitando esse componente, fazemos com que o personagem suma da tela.

O script é constituído por duas estruturas principais, a primeira é o método para fazer com que o jogador pisque ao levar dano. Isso é feito a partir do IEnumerator “PiscarDano”. Dentro desse método nós temos um laço de repetição “for”, que faz com que a repetição das linhas seguintes sejam possíveis.

Ele determina o número de repetições das linhas:

          mainRenderer.SetActive(true);
          yield return new WaitForSeconds(0.1f);
          mainRenderer.SetActive(false);
          yield return new WaitForSeconds(0.1f);

O código acima está dizendo para o “Sprite renderer” ligar e desligar a cada 0.1 segundos.                                 Obs: Já atrelamos o “mainRenderer” ao Sprite renderer na linha:

mainRenderer = GetComponent<SpriteRenderer>();

A segunda coisa que temos de fazer é deixar o jogador invencível durante o tempo em que ele está piscando. Para que isso aconteça, iremos criar uma booleana com o nome “imortal” e um método para resetar a imortalidade após o tempo desejado.

Para ajustarmos o tempo de imortalidade e tempo de piscagem simultaneamente, iremos criar a variável “tempoIP” que também poderá ser mudada no nosso inspector.

Print de tela

Para testar a funcionalidade do feedback, crie um objeto com um Box collider 2D (com a opção trigger ativada), com a tag “Inimigo”e com um Rigidbody2D com a gravidade zerada.

Print de tela

O jogador deve piscar e o tempo de imortalidade deve ser iniciado quando o jogador encostar no objeto inimigo.

O resultado final é esse!

Links úteis:

Laços de repetição “for”

Coroutines e IEnumerators

Sprite Renderer

Acesse a nossa área de cursos para aprender a desenvolver jogos utilizando as ferramentas Unity, Construct 2, Game Maker e MonoGame. Participe também do nosso grupo de estudos no Facebook.

 

Danilo Filitto

Sou Mestre em Ciência da Computação pela Universidade Estadual de Maringá – UEM, Pós-Graduado em Redes de Computadores e Comunicação de Dados pela Universidade do Estado do Paraná – UEL, Bacharel em Ciência da Computação pela Universidade do Oeste Paulista – UNOESTE.
Atuo na área acadêmica como professor desde 2006. Além de professor sou desenvolvedor de jogos, palestrante e mantenedor dos sites dfilitto e Make Indie Games.

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 2.252 outros assinantes

Anúncios

Aprenda a criar seus jogos com os melhores desenvolvedores de jogos

Advertisement

Quer aprender a programar?