Jump to content
UnitySpain
Lucky-chan

respawnear al morir?

Recommended Posts

Buenos días a tod@s, hoy tengo otro problema, he estado varios días investigando y buscando pero no he logrado hacer que esta "funcion(?)" funcione (valga la redundancia) es algo básico creo, simplemente un "Level Manager" que controla los checkpoints y la muerte del personaje, luego los checkpoints que simplemente se encargan de ajustar la nueva posición de resurrección, básicamente lo que sucede es que no he encontrado como hacer que cuando la "HP" llegue a 0 el pj muera, pero por la mala forma en que construí el sistema del HP hace que desconozca como llamar la float en la sección que necesito, aquí los scripts y como siempre gracias por la ayuda.

    void Update()
    {
        if (HPBar.getHP/.HP == 0)//aqui es donde intento conseguir la FLoat
        {
            LevelManager.RespawnPlayer();
        }
   // esta es toda la script de la barra de HP, básicamente todo el tema del Hp lo manejo por esta script que va a la barra
	Slider Barra;
    public LevelManager levelManager;
    private float MaxHP = 3f;
    private float Hp;
    public bool Dead;
    public GameObject player;
    // Start is called before the first frame update
    void Awake()
    {
        levelManager = FindObjectOfType<LevelManager>();
        Barra = GetComponent<Slider>();
    }
    public void Start()
    {
        Barra.maxValue = MaxHP;
        Barra.value = MaxHP;
    }

    // Update is called once per frame
    public void update()
    {
        Barra.value = Hp;
    }
    public void TakeDamage(float amount)
    {
        Barra.value = Mathf.Clamp(Barra.value-amount, 0f, MaxHP);
        if (Barra.value == 0)
        {
            StartCoroutine(Espera());
            levelManager.RespawnPlayer();
            Hp += 3f;
        }
    }
    IEnumerator Espera()
    {
        yield return new WaitForSeconds(2);
    }
}
 //esta es la script del Level manager

	public GameObject ChekkuPointo;
    public GameObject Player;


    public void RespawnPlayer()
    {
        Player.transform.position = ChekkuPointo.transform.position;
    }
}

como siempre estoy segura que se logra de manera estúpidamente fácil pero no lo logro :7_sweat_smile::7_sweat_smile:

Share this post


Link to post
Share on other sites

Hola,

 

yo soy novato en Unity, y muy bien no se lo que estas haciendo pero... Visto como programador, te lanzo esta pregunta.

 

Puede ser que el primer if de todos no se cumpla nunca?? Es decir que si tu tienes vida (me lo invento) 10 y te quitan 11 el HP sera  -1 no 0 ya no entra en ese IF.

No se si puede ser por eso pero si no controlas eso en ningún lado puede que vayan por ahí los tiros.

Saludos!

Share this post


Link to post
Share on other sites
On 4/5/2019 at 3:36 PM, TrikerLh said:

Hola,

 

yo soy novato en Unity, y muy bien no se lo que estas haciendo pero... Visto como programador, te lanzo esta pregunta.

 

Puede ser que el primer if de todos no se cumpla nunca?? Es decir que si tu tienes vida (me lo invento) 10 y te quitan 11 el HP sera  -1 no 0 ya no entra en ese IF.

No se si puede ser por eso pero si no controlas eso en ningún lado puede que vayan por ahí los tiros.

Saludos!

Gracias veré si es eso

Share this post


Link to post
Share on other sites
On 4/3/2019 at 8:01 PM, Lucky-chan said:

if (HPBar.getHP/.HP == 0)//aqui es donde intento conseguir la FLoat

Este IF es una cerdada, es verdad... Además es muy difícil que un valor float sea "0 puro", siempre se acaba quedando con algún decimal...

Hay un truco para asegurar que se cumpla más veces, y es usando el Mathf.Approximately(valor1,valor2). Pruébalo...

Share this post


Link to post
Share on other sites
1 hour ago, pioj said:

Mathf.Approximately

No conocía ese método, supuestamente compara con Epsilon, yo tenía algo así ( si tolerancia = Epsilon queda igual):

public static class Utilities
{

	public static bool isCloseTo(Vector3 input, Vector3 target, float tolerance)
	{
		return Vector3.Distance(input, target) <= tolerance;
	}

	public static bool isCloseTo(float input, float target, float tolerance)
	{
		return Mathf.Abs(target - input) <= tolerance;
	}

}

 

Share this post


Link to post
Share on other sites
18 hours ago, pioj said:

Este IF es una cerdada, es verdad... Además es muy difícil que un valor float sea "0 puro", siempre se acaba quedando con algún decimal...

Hay un truco para asegurar que se cumpla más veces, y es usando el Mathf.Approximately(valor1,valor2). Pruébalo...

Si bien la condición para comprar flotantes no está bien formulada, anterior a esta declaración tiene un Clamp, por lo que debería funcionar siempre y cuando la salud disminuya a un valor negativo.

Share this post


Link to post
Share on other sites

La programación no es mi fuerte pero con un:

if (HPBar.getHP/.HP <= 0)

¿No debería valer?

 

saludos

 

P.D: He conseguido poder ver el foro desde el curro así que me vereis más por aquí, jeje

Share this post


Link to post
Share on other sites

×
×
  • Create New...