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.