Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Regeneración de vida

Iniciado por SrDeriko, Agosto 02, 2015, 11:31:42 PM

Tema anterior - Siguiente tema
Buenas a todos. Soy nuevo en esto de Unity y mi nivel de scripting es de novato. Estoy desarrollando un pequeño arcade en mi tiempo libre y me gustaría que me ayudasen con unas pequeñas mejoras a mi script.Este es mi script:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Life : MonoBehaviour {
public float hp;
public Slider barVida;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
}

public void Hurt(float damage){
         this.hp -= damage;
         
   if (this.barVida) {
            this.barVida.value = this.hp;
         }
         
   if (this.hp < 0) {
            this.hp = 0;
         Destroy (this.gameObject);
   }
}
}
Me gustaría que me ayudasen a hacer que se regenerase la vida al pasar un tiempo predeterminado desde la última vez que se activó la función Hurt, para que no se regenere mientras se vaya restando hp y en la regeneración la vida vaya sumando de uno en uno en pocos segundos, y no se sume hasta el máximo de golpe. Muchas gracias por la ayuda

Agosto 03, 2015, 08:50:43 AM #1 Ultima modificación: Agosto 03, 2015, 08:51:02 AM por Quel
1) Creas una variable para llevar la cuenta del tiempo. Por ejemplo cuandoFueElUltimoHurt.
2) Cada vez que ejecutes el Hurt, actualizas la variable cuandoFueElUltimoHurt con la hora actual (usando el Time.time).
3) En la función Update, que se ejecuta en cada iteración del programa, tienes que comparar el valor de cuandoFueElUltimoHurt con el tiempo actual. Con eso puedes saber si ha pasado X tiempo desde el último Hurt.
4) En caso de haber pasado el tiempo suficiente, puedes empezar a regenerar vida.Esto sería un resumen muy tosco y preliminar de lo que tienes que hacer. He dejado algunas cosas en el tintero y el script podría mejorarse notablemente, pero ... No soy de los que les gusta darlo todo mascado.

[quote author=Quel" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="15883" data-ipsquote-contentcommentid="101118">1) Creas una variable para llevar la cuenta del tiempo. Por ejemplo cuandoFueElUltimoHurt.
2) Cada vez que ejecutes el Hurt, actualizas la variable cuandoFueElUltimoHurt con la hora actual (usando el Time.time).
3) En la función Update, que se ejecuta en cada iteración del programa, tienes que comparar el valor de cuandoFueElUltimoHurt con el tiempo actual. Con eso puedes saber si ha pasado X tiempo desde el último Hurt.
4) En caso de haber pasado el tiempo suficiente, puedes empezar a regenerar vida.

¿ Que es lo que no sabías hacer ?

Agosto 07, 2015, 10:55:25 PM #4 Ultima modificación: Agosto 07, 2015, 10:57:25 PM por SrDeriko
[quote author=Quel" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="15883" data-ipsquote-contentcommentid="101310 date=1438847421]¿ Que es lo que no sabías hacer ?[/quote]


using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Life : MonoBehaviour {
public float hp;
public Slider barVida;
public float timer;
public float v;
// Use this for initialization
void Start () {
   
}

// Update is called once per frame
void Update () {
   timer -= Time.deltaTime;
   if (timer < 0) {
      timer = 8;
      v = hp;
   }
   if(v == hp) {
      this.hp++;
   }
   if(v < hp) {
      this.hp++;
   }
   if (hp > 200) {
      this.hp = 200;
   }
   if (this.barVida) {
      this.barVida.value = this.hp;
   }      
}

public void Hurt(float damage){
   this.hp -= damage;
   
   if (this.barVida) {
      this.barVida.value = this.hp;
   }
   
   if (this.hp < 0) {
      this.hp = 0;
      Destroy (this.gameObject);
   }
}
}
 Tengo eso, pero hay algunas cosas que no sé hacer. Uno de mis errores es que cada 8 segundos se regenera aun estando recibiendo daño, he probado muchas cosas y no consigo reparar el error. También a veces la barra de vida asociada no se actualiza. Espero que puedas ayudarme a solucionar estos errores. Gracias

Etiquetas: