BARRA DE ENERGIA NÃO RESETA QUANDO O PLAYER RENASCE.
2 participantes
Página 1 de 1
BARRA DE ENERGIA NÃO RESETA QUANDO O PLAYER RENASCE.
Quando o player respawna a barra de vida reseta, mas a barra de energia não, ou seja, ele continua como estava antes do player morrer.
Gostaria de alguma solução para este problema.
Obrigado.
Gostaria de alguma solução para este problema.
- Código:
//Scripit responsável pelos elementos de UI
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UIManager : MonoBehaviour
{
public Slider barraEnergia;
public static UIManager instance;
private WaitForSeconds carregamentoEnergia = new WaitForSeconds(0.1f);
private Coroutine carregando;
public Slider healthUI;
public Image playerImage;
public Text playerName;
public Text livesText;
public GameObject enemyUI;
public Slider enemySlider;
public Text enemyName;
public Image enemyImage;
public float enemyUITime = 4f;
private float enemyTimer;
private Player player;
private void Awake()
{
instance = this;
}
// Start is called before the first frame update
void Start()
{
player = FindObjectOfType<Player>();
//Define o número máximo da barra de vida.
healthUI.maxValue = player.maxHealth;
//Quantidade de vida atual.
healthUI.value = healthUI.maxValue;
//Nome do Player em cima da barra de vida.
playerName.text = player.playerName;
//Foto do Player.
playerImage.sprite = player.playerImage;
//Número de vidas do PLayer.
AtualizarVidas();
//Quantidade de energia atual do Player.
player.energiaAtual = player.energiaMax;
//Barra de energia do Player cheia.
barraEnergia.maxValue = player.energiaMax;
//Barra de energia cheia.
barraEnergia.value = player.energiaMax;
}
// Update is called once per frame
void Update()
{
enemyTimer += Time.deltaTime;
if(enemyTimer >= enemyUITime)
{
enemyUI.SetActive(false);
enemyTimer = 0;
}
}
//Função que atualiza os valores na barra de vida do Player.
public void AtualizaBarra(int quantidade)
{
healthUI.value = quantidade;
}
//Função responsável por atualizar os valores da barra de vida do Inimigo.
public void AtualizarBarraInimigo(int maxHealth, int currentHealth, string name, Sprite image)
{
enemySlider.maxValue = maxHealth;
enemySlider.value = currentHealth;
enemyName.text = name;
enemyImage.sprite = image;
enemyTimer = 0;
enemyUI.SetActive(true);
}
//Função que atualiza o número de vidas na tela.
public void AtualizarVidas()
{
livesText.text = "x " + FindObjectOfType<GameManager>().vidas.ToString();
}
//Função responsável por fazer a quantidade de energia diminuir na barra de energia.
public void UsarEnergia(int quantidade)
{
if (player.energiaAtual - quantidade >= 0)
{
player.energiaAtual -= quantidade;
barraEnergia.value = player.energiaAtual;
if (carregando != null)
StopCoroutine(carregando);
carregando = StartCoroutine(CarregandoEnergia());
}
else
{
Debug.Log("Sem Energia!");
}
}
private IEnumerator CarregandoEnergia()
{
yield return new WaitForSeconds(2f);
while(player.energiaAtual < player.energiaMax)
{
player.energiaAtual += player.energiaMax / 75;
barraEnergia.value = player.energiaAtual;
yield return carregamentoEnergia;
}
carregando = null;
}
}
- Código:
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;
public class Player : MonoBehaviour
{
private float h;
private float z;
public float velocidadeMax = 4;
public float forcaPulo = 400;
public float minHeight, maxHeight;
public int maxHealth;
public string playerName;
public Sprite playerImage;
public int energiaAtual;
public int energiaMax;
private int vidaAtual;
private float velocidadeAtual;
private Rigidbody rb;
private Animator anim;
private Transform verificaChao;
private bool noChao;
private bool estaMorto = false;
private bool estaParaDireita = true;
private bool pulo = false;
public float distanciaDash = 15f;
bool emDash;
float duplaTecla;
KeyCode ultimaTecla;
// Start is called before the first frame update
void Start()
{
rb = GetComponent<Rigidbody>();
anim = GetComponent<Animator>();
verificaChao = gameObject.transform.Find("VerificaChao");
velocidadeAtual = velocidadeMax;
vidaAtual = maxHealth;
energiaAtual = energiaMax;
}
// Update is called once per frame
void Update()
{
noChao = Physics.Linecast(transform.position, verificaChao.position, 1 << LayerMask.NameToLayer("Ground"));
//Animação.
anim.SetBool("OnGround", noChao);
anim.SetBool("Dead", estaMorto);
//Pulo do personagem.
if (Input.GetButtonDown("Jump") && noChao)
{
pulo = true;
}
//Animação de ataque.
if (Input.GetButtonDown("Fire1"))
{
anim.SetTrigger("Attack");
}
if(!emDash && !estaMorto && noChao){
if (Input.GetKeyDown(KeyCode.A) && energiaAtual >= 25)
{
if (duplaTecla > Time.time && ultimaTecla == KeyCode.A)
{
StartCoroutine(Dash(-1f));
}
else
{
duplaTecla = Time.time + 0.5f;
}
ultimaTecla = KeyCode.A;
}
if (Input.GetKeyDown(KeyCode.D) && energiaAtual >= 25)
{
if (duplaTecla > Time.time && ultimaTecla == KeyCode.D)
{
StartCoroutine(Dash(1f));
}
else
{
duplaTecla = Time.time + 0.5f;
}
ultimaTecla = KeyCode.D;
}
}
}
private void FixedUpdate()
{
if (!estaMorto)
{
//Movimentação do Player.
h = Input.GetAxis("Horizontal");
z = Input.GetAxis("Vertical");
if (!noChao)
z = 0;
//Velocidade.
if(!emDash)
rb.velocity = new Vector3(h * velocidadeAtual, rb.velocity.y, z * velocidadeAtual);
//Animação andando.
if (noChao)
anim.SetFloat("Speed", Mathf.Abs(rb.velocity.magnitude));
//Vira sprite do Player de acordo com a direção em que ele está virado.
if(h > 0 && !estaParaDireita)
{
Flip();
}
else if(h < 0 && estaParaDireita)
{
Flip();
}
//Pulo.
if (pulo)
{
pulo = false;
//Força do pulo.
rb.AddForce(Vector3.up * forcaPulo);
}
//Limita movimentação do player.
float minWidth = Camera.main.ScreenToWorldPoint(new Vector3(0, 0, 10)).x;
float maxWidth = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, 0, 10)).x;
rb.position = new Vector3(Mathf.Clamp(rb.position.x, minWidth + 1, maxWidth - 1),
rb.position.y,
Mathf.Clamp(rb.position.z, minHeight, maxHeight));
}
}
//Função responsável por mudar a sprite.
void Flip()
{
estaParaDireita = !estaParaDireita;
Vector3 scale = transform.localScale;
scale.x *= -1;
transform.localScale = scale;
}
void VelocidadeZero()
{
velocidadeAtual = 0;
}
void ResetaVelocidade()
{
velocidadeAtual = velocidadeMax;
}
//Função responsável por fazer o Player tomar dano.
public void TomarDano(int dano)
{
if (!estaMorto)
{
vidaAtual -= dano;
anim.SetTrigger("HitDamage");
FindObjectOfType<UIManager>().AtualizaBarra(vidaAtual);
//Se a vida do Player for menor ou igual a zero:
if(vidaAtual <= 0)
{
estaMorto = true;
FindObjectOfType<GameManager>().vidas--;
FindObjectOfType<UIManager>().AtualizarVidas();
if (estaParaDireita)
{
//Quando o Player morrer, ele será jogado para trás.
rb.AddForce(new Vector3(-3, 5, 0), ForceMode.Impulse);
}
else
{
//Quando o Player morrer, ele será jogado para trás.
rb.AddForce(new Vector3(3, 5, 0), ForceMode.Impulse);
}
}
}
}
void PlayerRespawn()
{
estaMorto = false;
vidaAtual = maxHealth;
FindObjectOfType<UIManager>().AtualizaBarra(vidaAtual);
anim.Rebind();
float minWidth = Camera.main.ScreenToWorldPoint(new Vector3(0, 0, 10)).x;
transform.position = new Vector3(minWidth, 10, -4);
}
public IEnumerator Dash(float direction)
{
UIManager.instance.UsarEnergia(25);
anim.SetTrigger("Dash");
emDash = true;
rb.velocity = new Vector3(rb.velocity.x, 0f, 0f);
rb.AddForce(new Vector3(distanciaDash * direction, 0f, 0f), ForceMode.Impulse);
yield return new WaitForSeconds(0.4f);
emDash = false;
}
}
Obrigado.
ViniciusTKH- Membro
- PONTOS : 1581
REPUTAÇÃO : 4
Respeito as regras :
Re: BARRA DE ENERGIA NÃO RESETA QUANDO O PLAYER RENASCE.
Quando voce for respawna resete tanto a vida quanto a energia
Tópicos semelhantes
» [DUV] Barra de Energia
» Editar formato barra de energia feito no canvas
» Inimigo seguir quando ver o player
» COMO SALVAR O PLAYER QUANDO ELE TIVER DESATIVO OU ATIVADO??
» Mudar Scene quando o player colidir com um trigger
» Editar formato barra de energia feito no canvas
» Inimigo seguir quando ver o player
» COMO SALVAR O PLAYER QUANDO ELE TIVER DESATIVO OU ATIVADO??
» Mudar Scene quando o player colidir com um trigger
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos