Noticias

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

Llega la vida a 0 pero no muero(resuelto)

Iniciado por ramunda, Febrero 15, 2016, 05:08:57 PM

Tema anterior - Siguiente tema
Febrero 15, 2016, 05:08:57 PM Ultima modificación: Febrero 15, 2016, 09:28:05 PM por ramunda
Hola muy buenas, veréis , no se que demonios me he cargado de este código que me funcionaba bien...y ahora no veo por mucho que remiro donde tengo el error, la cosa es que la vida me baja cuando una bala me daña y llega a 0, pero no pasa nada osea se queda en 0 teoricamente deberia de hacer la animación bueno en este caso la explosión que le tengo asignada pero no pasa del 0, aver si alguien ve el error que seguro que es una tontería perore estoy rompiendo los cuernos y no lo veo!!, gracias de antemano!!! Gracias de antemano aquí el código: 
using UnityEngine;
using System.Collections;

    public class PlayerInfonaves : MonoBehaviour {
public GameObject laser1;
public GameObject laser2;
public GameObject monigote;
public GameObject healthBottle;
public GameObject player;
public AudioClip deathClip;
public AudioClip deathClip2;
public AudioSource sonido;
public AudioSource sonido2;
public float length;
public int Xmin = 400;
public int Xmax = 700;
public int Ymin = 300;
public int Ymax = 800;
public Transform spawnpoint;
public float timer2 = 40f;


int health = 100;
int damageCount = 0;
public float currentHealth;
bool playerFighting;
public GUIText healthbar;
float timer = 0.0f;
float healthTimer = 0.0f;
bool healthShouldRespawn = true;

public bool muerto = false;
public GameObject tuUI;

void Start () {
   currentHealth = health;
   tuUI.SetActive(false);
   }

void Update ()
{
timer2 -= Time.deltaTime;
//      if (timer2 < 0) {
//      timer2 = 100.0f;
//      currentHealth += 5;
//               }
   if (currentHealth > 100) {
   currentHealth = 100;
   }
   Cursor.visible = false;
   Debug.Log("player in combat? " + playerFighting);
   if(!playerFighting){
      Debug.Log("player is not fighting");
      if(currentHealth != 100){
         timer += Time.deltaTime;
         print ("timer: " + timer);
         if(timer > 0.5f){
            currentHealth += 0;
            timer = 0.0f;
      }
   }
   }
   else
   {
      if(currentHealth <= 0 && !muerto ){
         muerto = true;
         sonido.PlayOneShot(deathClip2);
         ///muerto2.play("muerto");
         GetComponent<PlayerControl>().enabled = false;
         laser1.SetActive(false);
         laser2.SetActive(false);
         monigote.SetActive(true);
         sonido2.mute = true;
         player.GetComponent<BloodSplat2>().enabled = true;

   
   



   
      }
   }
   healthbar.text = "Vida " + currentHealth + " / 100";
   
   if(healthShouldRespawn)
   {
      healthTimer += Time.deltaTime;
      
      if(healthTimer > 5.0f)
      {
         healthBottle.gameObject.SetActive(true);
         healthTimer = 1.0f;
      }
   }
   
   if(muerto){
      Cursor.visible = false;
      tuUI.SetActive(true);
      if(Input.GetKeyDown(KeyCode.Space)){
      Respawn();
      }
   }
   
}

public void ApplyDamage(int damage) {
   

   {
                       

      currentHealth -= damage;
      //check if health is lower than 0 when true it's set to 0 to avoid negative health.
      if (currentHealth < 0) {
         currentHealth = 0;
      }
      sonido2.PlayOneShot(deathClip);
      healthbar.text = "Health " + currentHealth + " / 100";
      damageCount =0;
   }
   
   print(currentHealth);
}

public void playerInCombat(bool combat){
   playerFighting = combat;
   playerFighting = true;
   }
      
public void Respawn(){
   tuUI.SetActive(false);
   muerto = false;
   player.gameObject.transform.position = spawnpoint.position;
   //transform.position = new Vector3(Random.Range(Xmin, Xmax),0, Random.Range(Ymin, Ymax));
   //transform.position = new Vector3(Random.Range(400.0f, 700.0f), 0, Random.Range(300.0f, 800.0f));
   GetComponent<PlayerControl>().enabled = true;
   player.GetComponent<BloodSplat2>().enabled = false;
   //Bocaarma.SetActive(true);
   laser1.SetActive(true);
   laser2.SetActive(true);
   monigote.SetActive(false);
   currentHealth = 100;
}

    void OnCollisionEnter (Collision collision) {
   Debug.Log("Hit by: " + collision.gameObject.name);


}

void OnTriggerEnter(Collider item){
   if(item.gameObject.tag == "PlayerHealthBottle")
   {
      if(currentHealth < 100)
      {
         currentHealth = currentHealth + 40;
         item.gameObject.SetActive(false);
         healthShouldRespawn = false;
         //Destroy(this.gameObject);
      }
   }
}
}
  


[quote author=Braltor" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35153" data-ipsquote-contentcommentid="127132 date=1455553137]2 palabras: Debug.Log[/quote]Gracias por la pronta respuesta Braltor, no se si te entiendo bien pero me estas diciendo con esto que el Debug.Log es el problema? 

con debug.log puedes ver los valores de las variables en varios momentos... asi ves mejor q esta pasando

Cita de: ramunda date=1455553561" data-ipsquote="" data-cite="ramunda" class="ipsQuoteGracias por la pronta respuesta Braltor, no se si te entiendo bien pero me estas diciendo con esto que el Debug.Log es el problema?
jajajaja no ... lo que te esta diciendo es que utilices Debug.Log para que busques tu mismo en que punto esta el error. No obstante esa salida vale +1

Febrero 15, 2016, 05:35:29 PM #5 Ultima modificación: Febrero 15, 2016, 05:47:08 PM por ramunda
[quote author=Arthure" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35153" data-ipsquote-contentcommentid="127135 date=1455554050] [/quote]
[quote author=Arthure" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35153" data-ipsquote-contentcommentid="127135 date=1455554050]jajajaja no ... lo que te esta diciendo es que utilices Debug.Log para que busques tu mismo en que punto esta el error. No obstante esa salida vale +Hola [/quote]Hola Arthure!! cuanto tiempo!! , ya estoy de nuevo por aquí después de unos meses muy catastróficos,  aver lo del log lo entiendo...pero no se donde ponerlo para ver donde se para ...y porque no sigue...no quiero que me arregleis el script , pero si me podeis dar una luz de el porque lo agradeceria , asi se donde esta el problema.

http://unityspain.com/profile/27191-ramunda/?do=hovercard" data-ipshover="" href="<___base_url___>/profile/27191-ramunda/">@ramunda te puedo preguntar de que youtuber o pagina has sacado ese codigo ... porque el que lo hiciera, se lo deberia hacer mirar eh !Hace unos cuantos meses que estas con Unity, hubieras tenido tiempo de aprender programacion ... no obstante, es muy licito no querer molestarse y pretender hacer proyectos a base de copy-paste aunque siempre te veas con el mismo problema. Pero por lo menos sigue este consejo, cuando pretendas hacer copy-paste sin saber programacion como minimo asegurate de que copias de alguien que sabe mas que tu !

entonces ya sabes q no esta entrando a los lugares q necesitas... pones otros logs donde esperarias que cambien los valores, y asi sabes si hay algo desconectado

[quote author=Arthure" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35153" data-ipsquote-contentcommentid="127137">http://unityspain.com/profile/27191-ramunda/?do=hovercard" data-ipshover="" href="<___base_url___>/profile/27191-ramunda/ date=1455554983]@ramunda te puedo preguntar de que youtuber o pagina has sacado ese codigo ... porque el que lo hiciera, se lo deberia hacer mirar eh !Hace unos cuantos meses que estas con Unity, hubieras tenido tiempo de aprender programacion ... no obstante, es muy licito no querer molestarse y pretender hacer proyectos a base de copy-paste aunque siempre te veas con el mismo problema. Pero por lo menos sigue este consejo, cuando pretendas hacer copy-paste sin saber programacion como minimo asegurate de que copias de alguien que sabe mas que tu ![/quote]Arthure, entiendo tu comentario, no lo copie de ningun yotuber...el desastre que vees lo he echo yo. a base de probar y leer.Y si te doy la razón llevo unos meses con unity , y también llevo medio año metido en una cama de hospital...debido a un accidente de trafico, y alli no dejan ni asomar un ordenador o libro..solo batas blancas y sueros.De buen rollo, si me quieres o puedes echar una mano te lo agradezco, sino tambien te lo agradezco, un saludo.  
[quote author=Braltor" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35153" data-ipsquote-contentcommentid="127138 date=1455555041]entonces ya sabes q no esta entrando a los lugares q necesitas... pones otros logs donde esperarias que cambien los valores, y asi sabes si hay algo desconectado[/quote]Asi lo intentare Braltor, gracias.

por los comentarios en ingles creia que lo habias copiado, pero si me dices que lo has hecho todo tu ... sorry ^.^me encantaria ayudarte, en serio, pero es que tiene tantos errores gordos (a parte del problema que buscas) que es mirarlo y duele la vista; da pereza buscar un error concreto en un codigo que lo miras por encima y estas viendo muchos otros errores ... no obstante, suerte con el codigo. ves probando con Logs y a ver si suena la flauta un saludo y que sea leve ese hospital

[quote author=Arthure" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35153" data-ipsquote-contentcommentid="127140">por los comentarios en ingles creia que lo habias copiado, pero si me dices que lo has hecho todo tu ... sorry ^.^me encantaria ayudarte, en serio, pero es que tiene tantos errores gordos (a parte del problema que buscas) que es mirarlo y duele la vista; da pereza buscar un error concreto en un codigo que lo miras por encima y estas viendo muchos otros errores ... no obstante, suerte con el codigo. ves probando con Logs y a ver si suena la flauta ;)

casi te puedo apostar mi vida a que tu problema rapida que tu variable playerFighting siempre es false      public void playerInCombat(bool combat){
        playerFighting = combat;
        playerFighting = true;
    }
ya que si te funciona el de bajar la vida a 0, entonces en ningun momento estan cambiando la variable playerFighting a true, osea esta funcion jamas es llamada, por ende jamas se pone en true y aunque la vida te baje a 0, pues si no cambias esa variable jamas te mostrara la animacion de muerte.espero te haya ayudado con tu problema saludos  

[quote author=ACarranza" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35153" data-ipsquote-contentcommentid="127148">casi te puedo apostar mi vida a que tu problema rapida que tu variable playerFighting siempre es false      public void playerInCombat(bool combat){
        playerFighting = combat;
        playerFighting = true;
    }
ya que si te funciona el de bajar la vida a 0, entonces en ningun momento estan cambiando la variable playerFighting a true, osea esta funcion jamas es llamada, por ende jamas se pone en true y aunque la vida te baje a 0, pues si no cambias esa variable jamas te mostrara la animacion de muerte.espero te haya ayudado con tu problema saludos  [/quote]ACarranza, has dado totalmente en el clavo, el enemigo que me disparaba no activava la funcion  character.playerInCombat(true); tal y como tu me comentas lo cual la variable nunca llamada no funcionaba.asi que he añadido esto a mi disparo de el enemigo: 
								

de nada amigo cuando gustes, igual mas adelante te ayudo a estructurar mejor ese script, por que no es sano estar comparando la vida en el update, de hecho solo lo tendrias que hacer cada vez que tienes un cambio de vida, aparte de que te recomiendo que quites la linea de   playerFighting = true; qpara   agarre el valor que le estas enviando y no se force a ser true todo el tiempo,entonces mejorando es : quitar el playerFightting = true, ademas de quecar si la vida es <=0 en la funcion donde le estas bajando la vida y ajam  despues te ayudo a optimizar, saludos. 

[quote author=ACarranza" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35153" data-ipsquote-contentcommentid="127164">de nada amigo cuando gustes, igual mas adelante te ayudo a estructurar mejor ese script, por que no es sano estar comparando la vida en el update, de hecho solo lo tendrias que hacer cada vez que tienes un cambio de vida, aparte de que te recomiendo que quites la linea de   playerFighting = true; qpara   agarre el valor que le estas enviando y no se force a ser true todo el tiempo,entonces mejorando es : quitar el playerFightting = true, ademas de quecar si la vida es <=0 en la funcion donde le estas bajando la vida y ajam :P

Etiquetas: