Noticias

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

Como accedo solo al script de un enemigo?

Iniciado por daniele_kiro, Octubre 25, 2016, 03:25:57 PM

Tema anterior - Siguiente tema
Octubre 25, 2016, 03:25:57 PM Ultima modificación: Octubre 25, 2016, 09:06:46 PM por pioj
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!!

Octubre 25, 2016, 04:10:43 PM #1 Ultima modificación: Octubre 25, 2016, 04:11:40 PM por francoe1
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.

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.

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.

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

Noviembre 14, 2016, 10:54:41 PM #5 Ultima modificación: Noviembre 14, 2016, 10:55:04 PM por kingtrase
@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 :)

····>Desarrollando un videojuegos online-arcade para Android.


····>Programador en:C,C#,VB.net,PHP,HTML5,SQL,JS,Ruby.


····>Trabajando en: Desarrollo de paginas web y bushistudios.


                    ๑۩۞۩๑_(▀▄)KINGTRASE()_๑۩۞۩๑ 



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

@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!

····>Desarrollando un videojuegos online-arcade para Android.


····>Programador en:C,C#,VB.net,PHP,HTML5,SQL,JS,Ruby.


····>Trabajando en: Desarrollo de paginas web y bushistudios.


                    ๑۩۞۩๑_(▀▄)KINGTRASE()_๑۩۞۩๑ 



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
 
 
 
 

Etiquetas: