Noticias

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

quitar vida a scipt enemigo

Iniciado por ramunda, Agosto 04, 2018, 05:10:19 PM

Tema anterior - Siguiente tema
Buenas tardes a todos/todas, cada vez que unity cambia de versión algo cambia en el codigo....
 
Aver estoy haciendo algo sencillo,tengo unos monigotes enemigos llamados "enemigo", los cuales tienes un script llamado Health.
 
Bien , la idea es que quiero quitarles vida, para ello los busco en este afragmento de codigo:
 

else if (ataca)
        {
            GetComponent<Animation>().CrossFade("vc_uppercut_jab");
            audiopega.enabled = true;
            if (attackDist <=2f)
            {
              GameObject.Find("enemigo").GetComponent<Health>().vida -= 80f * Time.deltaTime;
             
            }

 
busco el objeto, (enemigo). le cojo el script(health). y realizo lo que hace en este caso le quita vida cada segundo.
 
Pero nada...no me encuentra el enemigo.....me tira este error en la linea donde esta el find...
 
NullReferenceException: Object reference not set to an instance of an object
 
alguna idea por favor?
 
Gracias de antemano
 
 
 
 
 
 
 
 
 
 
 
 

Agosto 04, 2018, 06:16:22 PM #1 Ultima modificación: Agosto 05, 2018, 06:02:10 PM por BAMF
Puede ser por lo siguiente (No estoy muy seguro)...
 
Deberias poner la variable Health antes de comenzar, e identificarla en void Start, te quedaria algo asi:
 

public Health Enemigo
void Start () {
    Enemigo = GameObject.Find("enemigo").GetComponent<Health> ();
}
Luego mas abajo deberia decir :
else if (ataca)
        {
            GetComponent<Animation>().CrossFade("vc_uppercut_jab");
            audiopega.enabled = true;
            if (attackDist <=2f)
            {
              Enemigo.vida -= 80f * Time.deltaTime;
              
            }

 
Prueba, pero, guarda el proyecto antes, ya que si esa no es la solucion, no querras arruinar el codigo... Otro error tambien puede ser, que si el enemigo es un clon, su nombre ya no es "enemigo", sino "enemigo(Clone)", pero, nose como hacer que Unity interactue con los clones.
 
Espero haberte ayudado, sinceramente estoy aprendiendo aun a usar unity.
 
 

Estás buscando cualquier enemigo, la función Find() te devuelve el GameObject que tenga ese nombre, si el enemigo que quieres atacar se llama "Enemigo" o "enemigo1" por ejemplo no encontrará nada, además encuentra solo uno.
 
Ideas:
 
Si tienes ese trozo de código en el Update, haz lo que te dice el compañero y cachea las variables.
 
Si tienes varios enemigos puedes crear una lista para tener una referencia a los enemigos y cuando ataques miras si está dentro de la distancia de ataque.
 
Si estás usando físicas también puedes usar un Cast para ver si están dentro de la distancia de ataque.

Agosto 04, 2018, 11:03:32 PM #3 Ultima modificación: Agosto 04, 2018, 11:10:35 PM por ramunda
Antes de nada gracias #FrancoSP y juanma_teso.
 
He probado la propuesta de Franco, sigue dando el mismo error, lo que dice juanma tambien tiene sentido pero he probado con un solo enemigo con ese nombre exacto y tampoco funciona...yo tambien estoy aprendiendo pero creia que esto ya lo dominaba ..pues no.
 
Lo e puesto tal cual me comentais y nada:
 
 
 

public Health Enemigo;
void Start()
    {
        anim=GetComponent<Animation>();
        particulascamina.SetActive(false);
        GetComponent<AudioSource>().enabled = false;
        audiopega.enabled = false;
        Enemigo = GameObject.Find("enemigo").GetComponent<Health>();

 
y en el parrafo de ataque
 
 
 

else if (ataca)
        {
            GetComponent<Animation>().CrossFade("vc_uppercut_jab");
            audiopega.enabled = true;
            if (attackDist <=2f)
            {
             Enemigo.vida -= 80f * Time.deltaTime;
            }

 
pero el mismo error
 
que no encuentra el objeto :(
 
Claro porque soy tonto.....como me va a encontrarlo...el fallo es mio, y vosotros me lo habeis echo ver XDD
 
el script enemigo no se llama Health...ese es el de mi personage principal XDD se llama Healthenemiga....el otro problema que tengo es lo de la distancia pero eso es otro tema
 
aqui la resolución para posibles visitas:
 
 
 

public Healthenemiga Enemigo;/////////////asi se llama el script que quiero acceder.
 void Start()
    {
        anim=GetComponent<Animation>();
        particulascamina.SetActive(false);
        GetComponent<AudioSource>().enabled = false;
        audiopega.enabled = false;
        Enemigo = GameObject.Find("enemigo").GetComponent<Healthenemiga>();////////////// start correcto!!!
 
else if (ataca)
        {
            GetComponent<Animation>().CrossFade("vc_uppercut_jab");
            audiopega.enabled = true;
            if (attackDist <=2f)
            {
             Enemigo.vida -= 80f * Time.deltaTime;//////////quito vida correcto!!!
                       
            }

 
no se si de haberlo puesto al principio funcionase....pero asi funciona almenos con un enemigo :P
 
Mil gracias!!
 
 
 
 

Etiquetas: