Noticias

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

Instanciando Enemigo

Iniciado por ramunda, Julio 06, 2016, 06:23:13 PM

Tema anterior - Siguiente tema
Julio 06, 2016, 06:23:13 PM Ultima modificación: Julio 07, 2016, 10:52:21 AM por pioj
Buenas tardes,
 
Me esta llevando de cabeza lo que seguramente sera una tonteria pero no le veo el porqué...
 
Explico:
 
Tengo un cofre en la pantalla que al darle un par de yoyas se abre y crea un random de los prefabs que le añada.
 
Hasta aquí todo ok.
 
el problema viene cuando se instancian los prefabs en este caso enemigos,con sus scripts y todo en regla, aparecen en pantalla me siguen...pero no mueren!!.
 
El prefab que he creado lo añado manualmente a la escena y funciona....si lo añado desde los assets(lo arrastro a la lista de prefabs todo funciona menos el morir).
 
 
 
Aquí expongo los scripts:
 
Este instancia los prefabs:
 

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class vidaenemigacofre : MonoBehaviour {
public float vida = 2;
private AudioSource sonidocofreabre;
private bool cofreabre;
public GameObject cofrecerrado;
public GameObject cofreabierto;
public GameObject[]Items;
 
void Start()
{
   
   sonidocofreabre = GameObject.FindGameObjectWithTag ("sonidocofre").GetComponent<AudioSource> ();
   cofreabierto.SetActive(false);
 
}
void Update ()
{
   if (vida <= 0f) {
      if (!cofreabre)
         abriendo ();
      {
      }
   }
}
void abriendo ()
{
   cofreabre = true;
   sonidocofreabre.Play ();
   Debug.Log ("cofre se abre");
   Invoke ("abrierto", 2);
}
void abrierto ()
{
   cofreabierto.SetActive (true);
       cofrecerrado.SetActive (false);
   Instantiate(Items[Random.Range(,Items.Length)],transform.position,Quaternion.identity);
}
}

 
 
 
Este es la vida de la spider:
 

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class vidaenemigaspider : MonoBehaviour {
 
public float vida = 5;
public Animation anim;
public AudioClip audio1;
AudioSource audio;
private bool spidermuerto;
public siguejugador jugador;
void Start()
{
 audio = GetComponent<AudioSource> ();
}
void Update ()
{
   if (vida <= 0f) {
      if (!spidermuerto)
         spidermuere ();
      {
      }
   }
}
void spidermuere ()
{
   spidermuerto = true;
   jugador.enabled = false;
   audio.PlayOneShot (audio1, 0.3F);
   anim.Play ("die");
   Debug.Log ("spider muere");
}
}

 
 
 
y finalmente lo que le quita la vida a la spider:
 

using UnityEngine;
using System.Collections;
public class dañospider : MonoBehaviour {
public AudioClip muere;
//public vidaenemigaspider vida;
AudioSource audio;
 
void Start()
{
   audio = GetComponent<AudioSource> ();
    }
      
void OnTriggerEnter(Collider col)
{
   if (col.gameObject.tag == "spider") {
      Debug.Log ("muereee");
      audio.PlayOneShot (muere, 0.8F);
      GameObject.FindGameObjectWithTag ("spider").GetComponent<vidaenemigaspider>().vida -= 5;
   }
   }   
      
}

 
lo que me fijado es que al instanciar los prefabs los crea como (clones), pero el tag lo deja intacto lo cual no debería de afectarles.
 
Espero que tengan alguna idea que me esta volvindo loco!
 
 
 
Gracias de antemanoooo.

 
 


SOLUCIONADO.
 


Explico lo que he echo para los que lean este post:
 


Antes tenia un script que al entrar en contacto con el objeto que llevaba el script(dañospider), pues la spider moria. 
 


Pero...si había mas de una spider por ai.....se liaba  la cosa y solo moria 1.
 


Bien analizando y después de 4 cafés!! XD
 


He puesto el daño de la spider directamente en la vida de la spider(vidaenemigaspider), tenéis los scripts más arriba.
 


como lo he echo?
 


Pues suprimiendo el dañospider y fusionandolo en el  (vidaenemigaspider) , aquí el resultado.
 


using UnityEngine;
using System.Collections;
//using UnityEngine.UI;
public class vidaenemigaspider : MonoBehaviour {
 
public float vida = 5;
public Animation anim;
public AudioClip audio1;
AudioSource audio;
private bool spidermuerto;
public siguejugador jugador;
void Start()
{
 audio = GetComponent<AudioSource> ();
}
void Update ()
{
   if (vida <= 0f) {
      if (!spidermuerto)
         spidermuere ();
      {
         
      }
   }
}
 
void spidermuere ()
{
   spidermuerto = true;
   jugador.enabled = false;
   audio.PlayOneShot (audio1, 0.3F);
   anim.Play ("die");
   Debug.Log ("spider muere");
}
void OnTriggerEnter(Collider col)
{
if (col.gameObject.tag == "trampafuego")
   {
   Debug.Log ("muereee");
   GetComponent<vidaenemigaspider>().vida -= 5;
}
}
}


 
 


la fusion esta en las ultimas lineas no se si aparecen números pero esta entre la 42 y la 51.
 


trampafuego es lo que daña a la spider asi que, le he dicho que si la spider entra en triger con "trampafuego", pues que le reste la vida.
 


Asi puedo llamar directamente a la variable "vidaenemigaspider" de una forma mas sencilla y sin errores.
 


 
 


:)
 


Gracias por tan fantástica comunidad!!


Etiquetas: