Noticias

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

Duplicar enemigo

Iniciado por ramunda, Julio 21, 2016, 07:37:07 PM

Tema anterior - Siguiente tema
Buenas tardes,
 
Serian tan amables de darme una luz a este problema?.
 
Explico breve y claro.
 
Tengo una espada la cual esta con sus respectivos colliders y rigids, por otro lado tengo un enemigo el cual al recibir la castaña le baja la vida hasta que muere.
 
Esto funciona de maravilla hasta que duplico este enemigo para tener mas etc y no se porque no se les baja la vida si hay 2 pero si hay 1 si.
 
Daño de espada:
 

using UnityEngine;
using System.Collections;
public class dañoespada : MonoBehaviour {
public int damage = 10;
void OnCollisionEnter(Collision other)
{
if (other.gameObject.tag == "enemigo")
{
vidaenemigabichos.instance.vida -= damage;
//GetComponent<vidaenemigabichos>().vida -= damage;
Debug.Log ("le haces dañoooo");
 
}
}
}

 
vida del bixo:
 

using UnityEngine;
using System.Collections;
public class vidaenemigabichos : MonoBehaviour {
public static vidaenemigabichos instance;
public void Awake()
{
vidaenemigabichos.instance = this;
}
public int vida = 10;
private Animation anim;
public GameObject choke;
public AudioClip muerto;
 
void Update()
{
 if (vida <= ) {
  Debug.Log ("mueree");
  var clone = Instantiate(choke, transform.position, transform.rotation);
  Destroy (clone,6.0f);
 AudioSource.PlayClipAtPoint(muerto, transform.position);
//sangre.gameObject.SetActive(false);
Destroy(gameObject);
}   
}
   
}

 
Gracias.
 
 
 
 
 
 

aplicar el daño a ese static instance hace que solo 1 instancia del script cambie su valor

Me da a mi que el problema está en la variable estática 
 

public static vidaenemigabichos instance;

 
Al ser estática todos los objetos que tengan esa clase la variable instance va a hacer referencia a un solo enemigo, habiendo 1 o 200. Por eso cuando solo hay 1 te va bien, porque solo se puede referir a ese, pero si hay mas de uno a los demás no le hace referencia. 

Muy agradecido a los dos por la pronta respuesta, y si , juer que tonto soy esta claro como no he caído en eso.
 
He cambiado por esto:
 

using UnityEngine;
using System.Collections;
public class dañoespada : MonoBehaviour {
public int damage = 10;
void OnCollisionEnter(Collision other)
{
if (other.gameObject.tag == "enemigo")
{
//vidaenemigabichos.instance.vida -= damage;
GetComponent<vidaenemigabichos>().vida -= damage;
Debug.Log ("le haces dañoooo");

 
y esto:
 

using UnityEngine;
using System.Collections;
public class vidaenemigabichos : MonoBehaviour {

public int vida = 10;
private Animation anim;
public GameObject choke;
public AudioClip muerto;
void Update()
{
 if (vida <= ) {
  Debug.Log ("mueree");
  var clone = Instantiate(choke, transform.position, transform.rotation);
  Destroy (clone,6.0f);
 AudioSource.PlayClipAtPoint(muerto, transform.position);
//sangre.gameObject.SetActive(false);
Destroy(gameObject);
}   
}
   
}

 
Teóricamente ya no es estática y llamándola debería funcionar....pero no funciona...no me dan ningun error pero siguen sin morir.
 
Alguna otra idea?
 
Gracias de antemano.

Al detectar una colision estas accediendo al componente "vidaenemigobichos" de tu personaje(que no deberia tenerlo) y no de tu enemigo, deberias usar other.gameObject.GetComponenent...

Cita de: GSG3D date=1469125602Al detectar una colision estas accediendo al componente "vidaenemigobichos" de tu personaje(que no deberia tenerlo) y no de tu enemigo, deberias usar other.gameObject.GetComponenent...
   


Si , si y mas si. Tienes toda la razón y me doy de cabezazos por no ver esto también, pero en fin, ya mueren los enemigos de 2 en 2 y de 5 en 5 XDD todo perfecto, voy a postear el script correcto y lo marcare como mejor respuesta dando los merecidos créditos a ustedes 3, si les parece bien.
 
 
 
Gracias a :
 
Braltor,Trunex y GSG3D. los 3 han aportado información util y contundente para resolver esto.
 
Aqui el script final funcionando:
 

using UnityEngine;
using System.Collections;
public class dañoespada : MonoBehaviour {
private GameObject enemigo;   
public int damage = 10;
void Start()
{
enemigo = GameObject.FindWithTag ("enemigo");
}
void OnCollisionEnter(Collision other)
{
if (other.gameObject.tag == "enemigo")
{
other.gameObject.GetComponent<vidaenemigabichos> ().vida -= damage;   
}
Debug.Log ("le haces dañoooo");
}
}

 
 

Etiquetas: