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.

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.

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:
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.



