Conteúdo do Curso
Jogo de Luta no Unity
Jogo de Luta no Unity
Barra de Vida da Interface
A classe Player inclui código para atualizar a interface da barra de vida com base na vida atual do jogador. Isso é gerenciado por meio de três variáveis: UIHealthTransform
, HealthUIScale
e startingHealthUIWidth
. Abaixo está uma explicação de como essas variáveis são utilizadas para controlar a barra de vida.
Script para Barra de Vida
// Initialization in Start method
private void Start()
{
HealthUIScale = UIHealthTransform.sizeDelta;
startingHealthUIWidth = HealthUIScale.x;
}
// Updating health in GetAttacked method
public void GetAttacked(int damage)
{
if (isDead) return;
health -= damage;
HealthUIScale.x = health * startingHealthUIWidth / 100f;
UIHealthTransform.sizeDelta = HealthUIScale;
if (health <= 0)
{
isDead = true;
animator.SetBool("death", true);
var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity);
deathParticle.Play();
Destroy(deathParticle.gameObject, 5);
GameManager.instance.FinishGame();
}
}
Inicialização no Método Start
No método Start
, o tamanho inicial da barra de vida é capturado e armazenado.
private void Start()
{
// ... other initializations ...
HealthUIScale = UIHealthTransform.sizeDelta;
startingHealthUIWidth = HealthUIScale.x;
}
Atualização da Vida no Método GetAttacked
O método GetAttacked
atualiza a interface da barra de vida sempre que o jogador recebe dano.
Redução da Vida:
health -= damage;
A vida do jogador é reduzida pela quantidade de dano recebido.
Cálculo da Escala da Barra de Vida:
HealthUIScale.x = health * startingHealthUIWidth / 100f;
Explicação
Esta linha de código atualiza a largura da barra de vida com base na vida atual do jogador. Veja como funciona:
Vida:
health
é um float que representa a vida atual do jogador. Suponha que varie de 0 a 100.
Largura Inicial da Barra de Vida:
startingHealthUIWidth
é um float que representa a largura inicial da barra de vida quando o jogador está com vida cheia.
Escalonamento da Largura da Barra de Vida: O objetivo é reduzir proporcionalmente a largura da barra de vida conforme a vida do jogador diminui; Para isso, é necessário calcular qual porcentagem da vida do jogador resta e então aplicar essa porcentagem à largura inicial da barra de vida.
Cálculo Passo a Passo
Porcentagem de Vida Restante:
Divida a vida atual por 100 para obter um valor entre 0 e 1 que representa a porcentagem de vida restante do jogador. Por exemplo, se a vida do jogador for 75, health / 100f
resultará em 0.75
.
Esse cálculo converte o valor da vida em um formato percentual adequado para a representação na interface do usuário.
Aplicar Porcentagem à Largura Inicial:
Multiplique a porcentagem de vida restante pela largura inicial da barra de vida. Por exemplo, se o startingHealthUIWidth
for 200 (a largura total) e a vida do jogador estiver em 75%, a nova largura da barra de vida será 150 unidades (0.75 * 200 = 150
).
Utilizando esse cálculo, a largura da barra de vida representa de forma dinâmica e precisa a vida atual do jogador, fornecendo um feedback visual claro ao jogador.
Atualizar UI da Barra de Vida:
UIHealthTransform.sizeDelta = HealthUIScale;
O tamanho do RectTransform
que representa a barra de vida é atualizado.
Verificação de Morte do Jogador:
if (health <= 0)
{
isDead = true;
animator.SetBool("death", true);
var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity);
deathParticle.Play();
Destroy(deathParticle.gameObject, 5);
GameManager.instance.FinishGame();
}
Se a vida cair para 0 ou menos, o jogador é marcado como morto, e a animação de morte e partículas são acionadas.
Resumo da Funcionalidade da Barra de Vida na UI
Inicialização: O tamanho inicial da barra de vida é capturado no início.
Atualização da Barra de Vida: Quando o jogador recebe dano, o valor da vida é reduzido e a largura da barra de vida é recalculada e atualizada de acordo.
Morte do Jogador: Se a vida chegar a zero, o jogador é marcado como morto, acionando a animação de morte, partículas e encerrando o jogo.
Obrigado pelo seu feedback!