Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: SrDeriko en Agosto 02, 2015, 11:31:42 PM

Título: Regeneración de vida
Publicado por: SrDeriko en Agosto 02, 2015, 11:31:42 PM
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
Título: Regeneración de vida
Publicado por: Quel en Agosto 03, 2015, 08:50:43 AM
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.
Título: Regeneración de vida
Publicado por: SrDeriko en Agosto 03, 2015, 03:26:40 PM
[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. Título: Regeneración de vida
Publicado por: Quel en Agosto 06, 2015, 09:50:21 AM
¿ Que es lo que no sabías hacer ?
Título: Regeneración de vida
Publicado por: SrDeriko en Agosto 07, 2015, 10:55:25 PM
[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