Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: daniele_kiro en Octubre 25, 2016, 03:25:57 PM

Título: Como accedo solo al script de un enemigo?
Publicado por: daniele_kiro en Octubre 25, 2016, 03:25:57 PM
Hola gente...
 
Os comento intento acceder a una variable de un script mediante el siguiente proceso:
 



   
       
   
   
      function OnTriggerEnter(obj : Collider) {
          if(obj.transform.tag == "Enemigo"){
              var script = obj.transform.GetComponent(Enemigo);
              script.vida -= damage; 
   
   
                      }
   

[/quote]
 
Lo que me pasa es que a todos los enemigos que tienen el script unido les va quitando vida...
 
y solo quiero que le vaya restando la vida con el objeto en que entre en contacto.
 
Hay otra forma? Sabeis en que me estoy equivocando??
 
Muchas gracias de antemano!!
Título: Como accedo solo al script de un enemigo?
Publicado por: francoe1 en Octubre 25, 2016, 04:10:43 PM
Se puede deber a que la variable "vida" sea un campo estático, o bien, porque OnTriggerEnter está detectando varios objetos.
 
Dudo mucho de que sea un campo estático por la forma de acceder a dicha variables. Verifica que On Trigger este solo colisionando con el objeto deseado.
Título: Como accedo solo al script de un enemigo?
Publicado por: UnityDevelopersXD en Octubre 25, 2016, 08:15:07 PM
Yo pienso que es porque todos los enemigos tienen el mismo codigo.
 
El verifica si esta dentro del collider y baja la vida a todos los objetos con el codigo.
 
La verdad no sabria que puede ser, pero intenta lo que dice francoe.
Título: Como accedo solo al script de un enemigo?
Publicado por: esr en Octubre 26, 2016, 12:18:19 AM
Como dice francoe1, una variable estática no puede ser por la forma de acceder a ella (tengo un poco oxidado mi javascript pero en C# no se puede acceder así), puede ser que el OnTriggerEnter este colisionando con varios objetos a la vez, pon una traza con Debug.Log() para ver cuantas veces entra dentro y déjanos ver el código del enemigo a ver si sacamos lo que es.
Título: Como accedo solo al script de un enemigo?
Publicado por: lightbug en Noviembre 14, 2016, 09:43:27 PM
Buenas, las variables como energia, vida, etc son propias de cada gameObject, seguramente vida sea una public static, no lo se, lo que te conviene hacer es preparar en el script del enemigo una funcion publica que permita quitar vida en este caso
 

void OnTriggerEnter(Collider col){
    if(col.GetComponent<ScriptdelEnemigo>()){   //podes detectar tmb con tags, yo prefiero detectar el componente
        col.GetComponent<ScriptdelEnemigo>().QuitarVida(valorDaño);
}
}

 
y en el scirpt del enemigo
 

public void QuitarVida(int cantidad)
{
salud -= cantidad;
}

 
Yo prefiero trabajar con scripts de Salud o Health, ya que se aplica a cualquier cosa que admite daño como paredes, enemigos, el mismo Player, etc.
 
Saludos
Título: Como accedo solo al script de un enemigo?
Publicado por: kingtrase en Noviembre 14, 2016, 10:54:41 PM
@lightbug el problema esta posteado en unityscript no en C#
 
@francoe1 tenga razon y la variable sea 'static' si es asi borra ese argumento y ya.
 
Un Saludo :)
Título: Como accedo solo al script de un enemigo?
Publicado por: lightbug en Noviembre 14, 2016, 11:21:41 PM
Cita de: kingtrase date=1479160481@lightbug el problema esta posteado en unityscript no en C#
   
   
      @francoe1 tenga razon y la variable sea 'static' si es asi borra ese argumento y ya.
   
   
      Un Saludo :)
   


Si me di cuenta, ahora llaman UnityScript a JavaScript, igual no importa el lenguaje importa la logica empleada, cambiando dos cosas podes pasar de uno a otro
 
 
 
saludos
Título: Como accedo solo al script de un enemigo?
Publicado por: kingtrase en Noviembre 14, 2016, 11:24:21 PM
@lightbug no te lo tomes a mal, te lo dije solo por que igual este usuario no sabe de C# copia tu codigo y se hace la picha un lio :D jajajaja no por otra cosa
 
Un saludo!
Título: Como accedo solo al script de un enemigo?
Publicado por: lightbug en Noviembre 14, 2016, 11:27:54 PM
Jajaja No, no me lo tomo a mal para nada, esta perfecto copiar y pegar un codigo de un lenguage a otro, solo asi se aprende que jamas se debe copiar y pegar un codigo , lo mejor es analizarlo