Noticias

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

Problema con colliders para atacar y recibir daño

Iniciado por Mcloud, Junio 27, 2018, 06:37:55 PM

Tema anterior - Siguiente tema
Buenas, 
 
Estoy creando un juego tipo rol en 2D, tengo un personaje y un enemigo, cada uno con un tag distinto, "Player" y "Enemigo", ambos tienen 1 Rigidbody2D y 2 Colliders, luego tengo un circle Collider para el ataque, pero ese lo tengo en un objeto hijo, de esta manera
 

 
EL collider de ataque se sitúa según la dirección del personaje, hacia donde ataque, el colider grande es un trigger, el pequeño no, para que colisione y no pase con arboles y demas
 

 
En el colider de ataque tengo un script 
 

 
En el script Attack simplemente hago lo siguiente:
 

void OnTriggerEnter2D (Collider2D col) {
       
        print("entra:"+col);
        if (col.tag == "Player")
        {
            print("entra a daño de Player");            
        }
        if (col.tag == "Enemigo")
        {
            print("entra a daño de enemigo");
           
        }
    }
    private void OnTriggerStay2D(Collider2D collision)
    {
        print("se queda:"+collision);
    }

 
El collider de ataque se activa y desactiva en un intervalo de tiempo, si mi ataque dura 1 segundo el colider se activa entre 0.20 y 0.80, esto me funciona bien.
 
Lo que no consigo es que se detecte la colision, no se porque, no me pinta nada en la salida, si dejo a mi personaje quieto y el enemigo viene y me ataca no se detecta la colision, si en ese momento muevo a mi personaje si se detecta....hago algo mal? no seria la forma adecuada de hacerlo?
 
 
 
Muchas gracias

Cita de: Mcloud date=1530117475Lo que no consigo es que se detecte la colision, no se porque, no me pinta nada en la salida, si dejo a mi personaje quieto y el enemigo viene y me ataca no se detecta la colision, si en ese momento muevo a mi personaje si se detecta....hago algo mal? no seria la forma adecuada de hacerlo?
   


Y puede ser porque está uno encima de otro, el que primero lo toque será quien disparará OnTrigger, y quizás se esté disparando siempre el mismo.
 
Forma adecuada bueno, sí, primero es no usar tags para eso, pensá que tenés que independizar ambos colliders es decir que para uno no existe el otro y viceversa, entonces podés usar Layers. El concepto de layers gira en torno a las colisiones (fueran pensadas para esto además de la organización), y por ende al tipo de objeto (player, enemigo, trigger, deadZone, etc, las que quieras) entonces son muy utiles para detectar estas cosas que estás intentando hacer. Los tags sirven para que dentro de un tipo o una layer puedas dar una clasificación (por ej Layer : ground , tag : concrete , tag : wood , tag : grass ...), pero hablando de colisiones andate directamente a las layers. Fijate que en projectSettings/Physics tenés como filtrar las colisiones segun la layer.
 
Para este caso te conviene tener el código de trigger de ataque en su script, y el otro en otro script ya que cada OnTrigger funciona para cada gameObject dependiendo de la capa del gameobject (el que tenga el script, ojo), y en teoría si tenés cada trigger en distintas capas los tendrías en diferentes objects, es decir que un solo OnTrigger no te funcionaría si te vas a las layers.
 
 
 
Y bueno si no me crees modifica los triggers y fijate que si encogiendolos podés disparar el otro trigger, o si los cambias de posición.
 
 

Cita de: lightbug date=1530122446Y puede ser porque está uno encima de otro, el que primero lo toque será quien disparará OnTrigger, y quizás se esté disparando siempre el mismo.
   
   
      Forma adecuada bueno, sí, primero es no usar tags para eso, pensá que tenés que independizar ambos colliders es decir que para uno no existe el otro y viceversa, entonces podés usar Layers. El concepto de layers gira en torno a las colisiones (fueran pensadas para esto además de la organización), y por ende al tipo de objeto (player, enemigo, trigger, deadZone, etc, las que quieras) entonces son muy utiles para detectar estas cosas que estás intentando hacer. Los tags sirven para que dentro de un tipo o una layer puedas dar una clasificación (por ej Layer : ground , tag : concrete , tag : wood , tag : grass ...), pero hablando de colisiones andate directamente a las layers. Fijate que en projectSettings/Physics tenés como filtrar las colisiones segun la layer.
   
   
      Para este caso te conviene tener el código de trigger de ataque en su script, y el otro en otro script ya que cada OnTrigger funciona para cada gameObject dependiendo de la capa del gameobject (el que tenga el script, ojo), y en teoría si tenés cada trigger en distintas capas los tendrías en diferentes objects, es decir que un solo OnTrigger no te funcionaría si te vas a las layers.
   
   
       
   
   
      Y bueno si no me crees modifica los triggers y fijate que si encogiendolos podés disparar el otro trigger, o si los cambias de posición.
   
   
       
   


Muchas gracias, voy a probarlo!!

Junio 28, 2018, 09:51:45 AM #3 Ultima modificación: Junio 28, 2018, 09:52:10 AM por pioj
@Mcloud Llevas sin presentarte desde tu registro del 22 de Mayo... Por lo menos, preséntate en la Comunidad, por favor...

Cita de: pioj date=1530172305@Mcloud Llevas sin presentarte desde tu registro del 22 de Mayo... Por lo menos, preséntate en la Comunidad, por favor...
   


Mis disculpas
 
 

Cita de: lightbug date=1530122446Y puede ser porque está uno encima de otro, el que primero lo toque será quien disparará OnTrigger, y quizás se esté disparando siempre el mismo.
   
   
      Forma adecuada bueno, sí, primero es no usar tags para eso, pensá que tenés que independizar ambos colliders es decir que para uno no existe el otro y viceversa, entonces podés usar Layers. El concepto de layers gira en torno a las colisiones (fueran pensadas para esto además de la organización), y por ende al tipo de objeto (player, enemigo, trigger, deadZone, etc, las que quieras) entonces son muy utiles para detectar estas cosas que estás intentando hacer. Los tags sirven para que dentro de un tipo o una layer puedas dar una clasificación (por ej Layer : ground , tag : concrete , tag : wood , tag : grass ...), pero hablando de colisiones andate directamente a las layers. Fijate que en projectSettings/Physics tenés como filtrar las colisiones segun la layer.
   
   
      Para este caso te conviene tener el código de trigger de ataque en su script, y el otro en otro script ya que cada OnTrigger funciona para cada gameObject dependiendo de la capa del gameobject (el que tenga el script, ojo), y en teoría si tenés cada trigger en distintas capas los tendrías en diferentes objects, es decir que un solo OnTrigger no te funcionaría si te vas a las layers.
   
   
       
   
   
      Y bueno si no me crees modifica los triggers y fijate que si encogiendolos podés disparar el otro trigger, o si los cambias de posición.
   
   
       
   


Buenas, 
 
Ha costado, sobre todo porque no he podido dedicarle mucho tiempo, pero funciona como dices, he puesto el colider en un gameobject hijo, separandolo del principal, y con el 1 script sencillito que controla quien entra, y fenomeno oye, mil gracias!

Cita de: Mcloud date=1531496734Buenas, 
   
   
      Ha costado, sobre todo porque no he podido dedicarle mucho tiempo, pero funciona como dices, he puesto el colider en un gameobject hijo, separandolo del principal, y con el 1 script sencillito que controla quien entra, y fenomeno oye, mil gracias!
   


Etiquetas: