Noticias

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

Aparecer recuadro con "Reaparecer" al morir.

Iniciado por ramunda, Julio 02, 2015, 05:49:20 PM

Tema anterior - Siguiente tema
Hola gente guay, me estoy rompiendo los cuernos y no hay manera de poder poner un cuadradito con unas simples letras que pongan Reaparecer y que cuando clicke este cuadro respawnee mi personaje.
 
 
El script que tengo esta asi:

using UnityEngine;
using System.Collections;
public class PlayerInfo : MonoBehaviour {
public GameObject healthBottle;
public GameObject player;
public AudioClip deathClip;
public AudioClip deathClip2;
public float length;
int health = 100;
int damageCount = 0;
int currentHealth;
bool playerFighting;
public GUIText healthbar;
float timer = 0.0f;
float healthTimer = 0.0f;
bool healthShouldRespawn = false;
bool muerto= false;
// Use this for initialization
void Start () {
   currentHealth = health;
}

// Update is called once per frame
void Update () {
   Cursor.visible = false;
   print("player in combat? " + playerFighting);
   if(!playerFighting){
      print("player is not fighting");
      if(currentHealth != 100){
         timer += Time.deltaTime;
         print ("timer: " + timer);
         if(timer > 90.0f){
            currentHealth += 10;
            timer = 0.0f;
         }
      }
   }
   else
   {
      if(currentHealth <= 0 && !muerto ){
         muerto=true;
         GetComponent<AudioSource>().PlayOneShot(deathClip);length = 5f;
         Invoke("Respawn",5);
      }
   }
   healthbar.text = "Vida " + currentHealth + " / 100";
   
   if(healthShouldRespawn)
   {
      healthTimer += Time.deltaTime;
      
      if(healthTimer > 5.0f)
      {
         healthBottle.gameObject.SetActive(true);
         healthTimer = 0.0f;
      }
   }
   
}

public void ApplyDamage(int damage){
   damageCount = damageCount + damage;
   if(damageCount == 100){
      currentHealth = currentHealth - 30;
      GetComponent<AudioSource>().PlayOneShot(deathClip2);length = 0.2f;
      healthbar.text = "Health " + currentHealth + " / 100";
      damageCount = 0;
   }
   
   print(currentHealth);
}

public void playerInCombat(int combat){
   if(combat == 1){
      playerFighting = true;
   }
   else
   {
      playerFighting = false;
   }
}
void Respawn(){
   muerto=false;
   transform.position = new Vector3(Random.Range(50.0f, 120.0f), 0, Random.Range(10.0f, 200.0f));
   currentHealth = 100;
}
void OnTriggerEnter(Collider item){
   if(item.gameObject.tag == "PlayerHealthBottle")
   {
      if(currentHealth < 100)
      {
         currentHealth = currentHealth + 50;
         item.gameObject.SetActive(false);
         healthShouldRespawn = true;
      }
   }
}



linea 44 el personaje muere y llama a la funcion respawn despues de 5 segundos , esto se quitara si consigo el boton.
 
linea 83 empieza la funcion respawn y respaunea el personaje en las corrdenadas ramdom que estan asignadas.
 
Bien hasta aqui todo furula, pues bien me encantaria que alguien me dijera como poner antes de que el personaje respawnee un boton en pantalla que diga eso Reaparecer o algo asi y que cuando lo clickeee o apriete una letra o lo que sea siga con el random respawn tal y como hace ahora.
 
He mirado varios tutoriales pero sin exito, algunos porque estan en JS, otros porque no son precisamente esto....
 
Pido ayuda por favor.
 
Gracias de antemano, ya se que es una tontria pero no me sale...
 
 

Julio 02, 2015, 07:10:31 PM #1 Ultima modificación: Julio 02, 2015, 07:13:08 PM por KsCorrales
pseudocodigo:

si(el personaje esta muerto){
   activame esta UI;
}

depnde de como detectes el personaje ya, por ejemplo si la vida es 0 pues muestralo o si su estado es muerto en caso de q lo hagas con estados pues si el estado es muerto ps pones la UI.
 
edito: no habia visto tu codigo ya lo mire, ok tienes una variable muerto entonces haras:

if(muerto){
   tuUI.setActive(true);
}

Cita de: KsCorrales date=1435857031edito: no habia visto tu codigo ya lo mire, ok tienes una variable muerto entonces haras:

if(muerto){
   tuUI.setActive(true);
}

 
tuUI.SetActive(true);

Julio 02, 2015, 11:48:06 PM #3 Ultima modificación: Julio 02, 2015, 11:49:09 PM por ramunda
Muchas gracias a los 2 @Jose134 y @Ks Corrales sin orden preferido.
 
La cosa es que por mucho UI que le meto me peta todo....
 
Donde deberia de poner  el if(muerto){
tuUI.setActive(true);

}
 
Deberia poner un Var arriba tipo Var UI o algo asi? esque estoy con unity 5 y me vuelve locoooo para crear un UI(antiguo GUI) hay que meterlo dentro de un empty object y desde alli llamando a una variable hacer el GUI.....
 
 
Se que es es mucho pedir pero os debere una grande si me podeis dar aunque sea un ejemeplo de como meter el Santo UI o Gui o lo que vaya alli.Y lo de darle a la tecla para respawn?¿ aix....algun dia aprendedere _P
 
Aprendo mas de vuetras respuestas de de 1000 tutoriales...
 
Gracias!!!

Cada elemento del UI es un GameObject asi que lo puedes almacenar en una variable de ese tipo (public GameObject tuUI;)
 
el if(muerto){} lo tendrias que poner en el Update ya que la comparacion la tienes que hacer cada frame
 
tambien podrias poner el tuUI.SetActive(true); donde haces la variable muerto true
 
void Respawn la tendrias que hace publica para poder activarla desde el boton
 
te recomiendo este tutorial
eature=oembed" frameborder="0" allowfullscreen="true">
 
por lo que se quedaria algo asi

public GameObject tuUI;
public bool muerto;
void Update () {
    if(muerto){
        tuUI.SetActive(true); //Activa el UI
        if(Input.GetKeyDown(KeyCode.Space)){
             Respawn();
        }
    }
}
public void Respawn () {
    tuUI.SetActive(false); //Desactiva el UI
    muerto = false;
}

Cita de: Jose134 date=1435909743 
Cada elemento del UI es un GameObject asi que lo puedes almacenar en una variable de ese tipo (public GameObject tuUI;)
 
el if(muerto){} lo tendrias que poner en el Update ya que la comparacion la tienes que hacer cada frame
 
tambien podrias poner el tuUI.SetActive(true); donde haces la variable muerto true
 
void Respawn la tendrias que hace publica para poder activarla desde el boton
 
te recomiendo este tutorial
eature=oembed" frameborder="0" allowfullscreen="true">
 
por lo que se quedaria algo asi

public GameObject tuUI;
public bool muerto;
void Update () {
    if(muerto){
        tuUI.SetActive(true); //Activa el UI
        if(Input.GetKeyDown(KeyCode.Space)){
             Respawn();
        }
    }
}
public void Respawn () {
    tuUI.SetActive(false); //Desactiva el UI
    muerto = false;
}

Compañero. muchas gracias e intentado meter este codigo que me has dicho en el void update y me peta todo el scrip ...soy lerdo lo reconozco.
 
Si eres tan amable de colocarlo donde debe de ir cada fragmento que me has dicho sin que pete todo el codigo te lo agradezco, sino te lo agradezco igualmente por molestarte y dedicar tu tiempo.
 
Un saludo cordial.
 
 
 


using UnityEngine;
using System.Collections;
public class PlayerInfo : MonoBehaviour {
public GameObject healthBottle;
public GameObject player;
//public AudioClip deathClip;
//public AudioClip deathClip2;
public float length;
int health = 100;
int damageCount = 0;
int currentHealth;
bool playerFighting;
//public GUIText healthbar;
float timer = 0.0f;
float healthTimer = 0.0f;
bool healthShouldRespawn = false;

public bool muerto = false;
public GameObject tuUI;
void Start () {
   currentHealth = health;
   tuUI.SetActive(false);
}
void Update () {
   Cursor.visible = false;
   print("player in combat? " + playerFighting);
   if(!playerFighting){
      print("player is not fighting");
      if(currentHealth != 100){
         timer += Time.deltaTime;
         print ("timer: " + timer);
         if(timer > 90.0f){
            currentHealth += 10;
            timer = 0.0f;
         }
          }
   }
   else
   {
      if(currentHealth <= 0 && !muerto ){
         muerto = true;
         //GetComponent<AudioSource>().PlayOneShot(deathClip);length = 5f;
      }
   }
   //healthbar.text = "Vida " + currentHealth + " / 100";
   
   if(healthShouldRespawn)
   {
      healthTimer += Time.deltaTime;
      
      if(healthTimer > 5.0f)
      {
         healthBottle.gameObject.SetActive(true);
         healthTimer = 0.0f;
      }
   }
   if(muerto){
      Cursor.visible = true;
      tuUI.SetActive(true);
      if(Input.GetKeyDown(KeyCode.Space)){
         Respawn();
      }
   }
   
}

public void ApplyDamage(int damage){
   damageCount = damageCount + damage;
   if(damageCount == 100){
      currentHealth = currentHealth - 30;
      //GetComponent<AudioSource>().PlayOneShot(deathClip2);length = 0.2f;
      //healthbar.text = "Health " + currentHealth + " / 100";
      damageCount = 0;
   }
   
   print(currentHealth);
}

public void playerInCombat(int combat){
   if(combat == 1){
      playerFighting = true;
   }
   else
   {
      playerFighting = false;
   }
}
public void Respawn(){
   tuUI.SetActive(false);
   muerto = false;
   transform.position = new Vector3(Random.Range(50.0f, 120.0f), 0, Random.Range(10.0f, 200.0f));
   currentHealth = 100;
}
void OnTriggerEnter(Collider item){
   if(item.gameObject.tag == "PlayerHealthBottle")
   {
      if(currentHealth < 100)
      {
         currentHealth = currentHealth + 50;
         item.gameObject.SetActive(false);
         healthShouldRespawn = true;
      }
   }
}
}

Asi te deberia de funcionar a la perfeccion
 
PD: lo que esta puesto como comentario era para que a mi me funcionase sin tenerlo, le puedes quitar el // y teoricamente deberia de funcionar

Julio 03, 2015, 07:02:56 PM #7 Ultima modificación: Julio 03, 2015, 07:04:29 PM por ramunda
Estimado Jose 134, no tengo palabras para agradecerte el tiempo y dedicación que me estas prestando.Gracias.
 
Lamento decir que algo no va bien....mi personaje ahora no muere...le sigue bajando la vida indefinidamente y no muere.
 
Cree el object con las letras que aprecen y las puse en el script modificado que gentilmente me has proporcionado aqui.
 
Pero pasa eso...la vida sigue bajando y bajando...y no se activa el gui como esperabamaos que puede estar fallando?
 
Gracias de nuevo un saludoooo
 
P.d restablecí todos los ///// y un comentario mas donde pones tuUI hay que poner algo o es la variable que luego me pide que le ponga el gameobject?

Julio 03, 2015, 07:09:23 PM #8 Ultima modificación: Julio 03, 2015, 07:29:11 PM por ramunda
Vale.....e visto lo que pasa....si muere....pero no sale el guitext que le meti y la vida sigue bajando y bajando y el bicho pegandome y pegandome XDD pero si aprietas space resuscita....algo debo haber echo mal o en el gui o no se pero la vida sigue bajando y el bicho dandome jajjajajaj aver que averiguo
 
te explico e creado un Text mesh 3d...he puesto las letras estas muerto y tal y tal ....en un gameobject vacio. lo he puesto en la pestaña de el codigo donde pone tu UI...y na no aparece xddd

Cita de: ramunda date=1435943363Vale.....e visto lo que pasa....si muere....pero no sale el guitext que le meti y la vida sigue bajando y bajando y el bicho pegandome y pegandome XDD pero si aprietas space resuscita....algo debo haber echo mal o en el gui o no se pero la vida sigue bajando y el bicho dandome jajjajajaj aver que averiguo
podrias añadir un if(!muerto){} a donde se le resta vida y asi dejaria de bajar tambien por si acaso (la verdad es que no me he fijado si esto ya lo tienes) podrias añadir if(vida < 0){ vida = 0; }
 en cuanto a lo de que no sale el GuiText no se que podra ser, creo que el script esta bien pero tambien es verdad que se me suelen escapar muchos errores tontos cuando programo

Julio 03, 2015, 07:43:13 PM #10 Ultima modificación: Julio 03, 2015, 09:24:59 PM por ramunda
Cita de: Jose134 date=1435944202podrias añadir un if(!muerto){} a donde se le resta vida y asi dejaria de bajar tambien por si acaso (la verdad es que no me he fijado si esto ya lo tienes) podrias añadir if(vida < 0){ vida = 0; }
 en cuanto a lo de que no sale el GuiText no se que podra ser, creo que el script esta bien pero tambien es verdad que se me suelen escapar muchos errores tontos cuando programo
instruieme donde se le resta la vida es aqui...eso creo!!! xdd

public void ApplyDamage(int damage){
   damageCount = damageCount + damage;
   if(damageCount == 100){
      currentHealth = currentHealth - 30;
      GetComponent<AudioSource>().PlayOneShot(deathClip2);length = 0.2f;
      healthbar.text = "Health " + currentHealth + " / 100";
      damageCount = 0;

y lo de la vida es esta:

{
      if(currentHealth <= 0 && !muerto ){
         muerto = true;
         GetComponent<AudioSource>().PlayOneShot(deathClip);length = 5f;
      }
   }

y por cierto...errores tu?, mirame a mi que no se poner dos lineas seguidas hahahha que eres un mostruo!!! que me das una envidea del copon por saber lo que sabes faltaria mas que no pudieras tener un fallo ...que eso esta por ver
 
mas averiguaciones....si sale el texto si....pero sale donde se creooooooen alguna parte de el mapa no en la pantalla principal y los mas gracioso es que el personage aun muerto sigue andando y chillando como una cabra locaaaaaaaaaa creo que tenemos que meter algun screeen position en el !muerte o algo asi para que el texto salga delante de el personaje no en elguna parte de el escenario

Cita de: ramunda date=1435945393instruieme donde se le resta la vida es aqui...eso creo!!! xdd

public void ApplyDamage(int damage){
   damageCount = damageCount + damage;
   if(damageCount == 100){
      currentHealth = currentHealth - 30;
      GetComponent<AudioSource>().PlayOneShot(deathClip2);length = 0.2f;
      healthbar.text = "Health " + currentHealth + " / 100";
      damageCount = 0;
                }

 
Justo debajo de if(damageCount == 100){} añade

if(currentHealth < 0){
     currentHealth = 0;
}

asi la vida nunca sera un valor negativo
 
el if(!muerto){} he pensado que seria mejor que lo agregases en la IA del enemigo, asi tambien pararias las animaciones y sonidos, lo tienes que poner para que dentro de ese if este basicamente todo. Y para arreglar lo de que el personaje sigue moviendose puedes hacer lo mismo que en la IA del enemigo o desactivar el script de movimiento cuando muere y reactivarlo cuando spawnee

if(currentHealth <= 0 && !muerto ){
muerto = true;
GetComponent<AudioSource>().PlayOneShot(deathClip);length = 5f;
        GetComponent<ScriptDeMovimiento>().enabled = false; //no me acuerdo si era "enabled" o "active", si no funciona ese prueba con active
}

En cuanto a lo del texto si se ve bien en el editor antes de jugar no se donde esta el problema ya que lo unico que hace es activar y desactivarlo, por lo que la posicion no se modifica. Si no consigues solucionar eso manda un par de screenshots

Julio 04, 2015, 02:12:00 PM #12 Ultima modificación: Julio 04, 2015, 02:16:29 PM por ramunda
Cita de: Jose134 date=1435997439Justo debajo de if(damageCount == 100){} añade

if(currentHealth < 0){
     currentHealth = 0;
}

asi la vida nunca sera un valor negativo
 
el if(!muerto){} he pensado que seria mejor que lo agregases en la IA del enemigo, asi tambien pararias las animaciones y sonidos, lo tienes que poner para que dentro de ese if este basicamente todo. Y para arreglar lo de que el personaje sigue moviendose puedes hacer lo mismo que en la IA del enemigo o desactivar el script de movimiento cuando muere y reactivarlo cuando spawnee

if(currentHealth <= 0 && !muerto ){
muerto = true;
GetComponent<AudioSource>().PlayOneShot(deathClip);length = 5f;
        GetComponent<ScriptDeMovimiento>().enabled = false; //no me acuerdo si era "enabled" o "active", si no funciona ese prueba con active
}

En cuanto a lo del texto si se ve bien en el editor antes de jugar no se donde esta el problema ya que lo unico que hace es activar y desactivarlo, por lo que la posicion no se modifica. Si no consigues solucionar eso manda un par de screenshots
Vale mas problemas....lo de desactivar los controles de el personaje que es el FPSinput controller resulta que esta en JS y el script que trabajamos esta en C## por lo cual no se pueden ver y da fallo....lo de que se baje la vida SI, funciona parcialmente se para a -30 pero se para XD.
 
lo del texto estoy alucinando le he movido el texto delante de las narices al personaje, se vee en pantalla en la previeu , pero cuando muere el texto aparece si, pero donde lo deje, no aparece delante de el personaje osea en la vista de el personaje aparece donde se quedo.Funcionar funciona pero no se mueve con el.
 
Deberia alomejor meterlo en la main camera?, en el jugador? ,(creo que ya lo prove pero provare de nuevo XD
 
Ahora preparo los scrennshots
 
 
A por cierto : GRACIAS!!
 
PARA PARA  lo del texto esta Solucionado!!!!!!!!!!!, mi pobre cabeza no da para mas jajajja es tan facil como meterlo en la main camera....y asi aparece delante de el jugador y se lo lleva con el!!!! ,Bien por ti!!, solo falta aver como desactivamos el controller :PPP


Cita de: Jose134 date=1436021185Prueba mirando este post
http://answers.unity3d.com/questions/304952/how-to-enabledisable-javascript-using-a-c-script.html" rel="external nofollow">http://answers.unity3d.com/questions/304952/how-to-enabledisable-javascript-using-a-c-script.html
 
Muuuuchas gracias Jose 134 estaba viendo el mismo post que me has puesto lollll, en breve te digo si funciona el metodo meterlo en assets !!

Etiquetas: